Пример #1
0
    def test_actualizar_freqs(self):

        with open('resultados.json') as r:
            j = json.load(r)

        resultados = Resultados()
        resultados.actualizar_freqs(j)
Пример #2
0
    def postear_en_dlm(self, fecha, diario, secciones):
        resultados = Resultados()
        visu = Visualizador()
        tolkien = Escritor()

        if '-' in secciones:
            secciones = secciones.split('-')
        else:
            secciones = [secciones]

        freqs = resultados.frecuencias(fecha=fecha,
                                       diario=diario,
                                       secciones=secciones,
                                       top=20,
                                       verbos=False)
        if not bool(freqs):
            return

        path_imagen = os.getcwd() + '/imagenes/' + diario + '-todo.png'
        visu.nube(path_imagen, freqs, con_espacios=False)
        texto = tolkien.tweet_tendencias(freqs=freqs,
                                         fecha=fecha,
                                         diario=diario)

        textos_e_imagenes = [{'media': [path_imagen], 'texto': texto}]

        for s in secciones:
            freqs = resultados.frecuencias(fecha=fecha,
                                           diario=diario,
                                           secciones=s,
                                           top=20,
                                           verbos=False)
            if not bool(freqs):
                continue

            path_imagen = os.getcwd(
            ) + '/imagenes/' + diario + '-' + s + '.png'
            visu.nube(path_imagen, freqs, con_espacios=False)
            texto = tolkien.tweet_tendencias(freqs=freqs,
                                             fecha=fecha,
                                             diario=diario,
                                             secciones=s)

            textos_e_imagenes.append({'media': [path_imagen], 'texto': texto})

        cm = CM()
        cm.twittear_hilo('dicenlosmedios', textos_e_imagenes)
Пример #3
0
def actualizar_resultados(medio):
    frecuencias = Frecuencias(medio.noticias)
    try:
        frecuencias.calcular()
    except:
        print('error calculando frecuencias de ' + medio.etiqueta + ': ' +
              str(sys.exc_info()[0]))
        return False

    resultados = Resultados()
    try:
        resultados.actualizar_freqs(frecuencias.resultados)
    except:
        print('error actualizando frecuencias de ' + medio.etiqueta + ': ' +
              str(sys.exc_info()[0]))
        return False

    return True
Пример #4
0
def resultados_editoriales():
    resultados = Resultados()
    freqs = Frecuencias()
    k = Kiosco()
    total = 0
    agregados = 0

    diario='diariodeleuco'
    seccion='editorial'
    editoriales = k.noticias(diario=diario, secciones=seccion)

    buffer_resultado = []
    for e in editoriales:
        f_ter_tit, f_ver_tit, f_per_tit, f_ter_txt, f_ver_txt, f_per_txt = freqs.tituloytexto2freqs(e.titulo,e.texto)
        buffer_resultado.append({'diario':diario, 'seccion': seccion, 'fecha': e.fecha.strftime('%Y%m%d%H%M%S'), 'url':e.url, 'f_ter_tit': f_ter_tit, 'f_ver_tit': f_ver_tit, 'f_per_tit': f_per_tit, 'f_ter_txt': f_ter_txt, 'f_ver_txt': f_ver_txt, 'f_per_txt': f_per_txt})

    resultados.bd.frecuencias.insert_many(buffer_resultado)
Пример #5
0
def actualizar_resultados_discursos(medio):
    frecuencias = Frecuencias([])
    freqs_discursos = []
    try:
        for discurso in medio.noticias:
            tokens_tit, tokens_txt = frecuencias.tokens(
                discurso.titulo, discurso.texto)
            resultado = {
                'presidente': discurso.seccion,
                'fecha': discurso.fecha.strftime('%Y%m%d'),
                'hora': discurso.fecha.strftime('%H%M%S'),
                'url': discurso.url,
                'adjtit': frecuencias.top(tokens_tit['adjetivos'], 30),
                'sustit': frecuencias.top(tokens_tit['sustantivos'], 30),
                'vertit': frecuencias.top(tokens_tit['verbos'], 30),
                'enttit': frecuencias.top(tokens_tit['entidades'], 30),
                'adjtxt': frecuencias.top(tokens_txt['adjetivos'], 50),
                'sustxt': frecuencias.top(tokens_txt['sustantivos'], 50),
                'vertxt': frecuencias.top(tokens_txt['verbos'], 50),
                'enttxt': frecuencias.top(tokens_txt['entidades'], 50)
            }
            freqs_discursos.append(resultado)
    except:
        print('error calculando frecuencias de ' + medio.etiqueta + ': ' +
              str(sys.exc_info()[0]))
        return False

    resultados = Resultados()
    try:
        resultados.bd.frecuencias_discursos.insert_many(freqs_discursos)
    except:
        print('error actualizando frecuencias de ' + medio.etiqueta + ': ' +
              str(sys.exc_info()[0]))
        return False

    return True
Пример #6
0
    def postear_contador(self, fecha, concepto):
        resultados = Resultados()
        tolkien = Escritor()

        terminos = {
            'cfk': [
                'CFK', 'Kirchner', 'Cristina', 'Cristina Kirchner',
                'Cristina Fernández', 'Cristina Fernández de Kirchner',
                'Cristina Fernández De Kirchner', 'Vicepresidenta'
            ],
            'dolar': ['dólar', 'US$', 'Dólar'],
            'corrupcion': ['corrupción', 'corrupto', 'Corrupción'],
            'larreta': [
                'Larreta', 'Horacio Larreta', 'Rodríguez Larreta',
                'Horacio Rodríguez', 'Horacio Rodríguez Larreta'
            ],
            'venezuela': [
                'Venezuela', 'Nicolás Maduro', 'Maduro', 'Chávez',
                'Hugo Chávez', 'Chavez', 'Hugo Chavez'
            ],
            'inseguridad': ['inseguridad', 'inseguro'],
            'miedo':
            ['miedo', 'muerte', 'muerto', 'muerta', 'asesinato', 'horror']
        }

        tabla = {}
        for medio in [
                medio for medio in tolkien.hashtags.keys()
                if medio != 'casarosada'
        ]:

            freqs = resultados.frecuencias(fecha=fecha,
                                           diario=medio,
                                           verbos=False,
                                           top=2000)

            if not bool(freqs):
                continue

            total = sum(
                [f[1] for f in freqs.items() if f[0] in terminos[concepto]])

            if total == 0:
                continue

            tabla[medio] = total

        if len(tabla) == 0:
            return

        ordenada = {
            k: v
            for k, v in sorted(
                tabla.items(), key=lambda item: item[1], reverse=True)
        }
        texto = tolkien.tweet_contador(concepto=concepto,
                                       freqs=ordenada,
                                       fecha=fecha)

        cm = CM()
        cm.twittear_texto('dicenlosmedios', texto)
Пример #7
0
    def postear_en_discursoshistoricos(self, cuenta, fecha=None):
        resultados = Resultados()
        kiosco = Kiosco()
        visu = Visualizador()
        tolkien = Escritor()

        presidente, subfijopng, hashtag = self.info_cuenta(cuenta)

        # recupero frecuencias al azar
        freqs = resultados.bd.frecuencias_discursos.aggregate([{
            '$match': {
                'presidente': presidente
            }
        }, {
            '$sample': {
                'size': 1
            }
        }])

        if not bool(freqs):
            return

        cm = CM()
        for freq in freqs:
            # recupero texto del discurso
            discurso = kiosco.noticias(diario='casarosada', url=freq['url'])[0]

            # armo tweet con el discurso en imagenes
            texto = " ".join(
                re.split("\s+", discurso['texto'], flags=re.UNICODE))
            paths_imagenes = visu.texto_en_imagenes(
                texto, 'calibri.ttf', 17, 800, 600,
                os.getcwd() + "/imagenes/intro" + subfijopng)
            # TODO: la fecha esta MAL. pasar de date a string.
            tw_intro = {
                'texto':
                "Discurso del " + tolkien.separar_fecha(fecha=freq['fecha']) +
                " de " + hashtag + ". Hilo 👇",
                'media':
                paths_imagenes
            }

            # armo textos del tweet
            txt_sustantivos = tolkien.texto_tweet_sustantivos_discurso(
                freq['sustxt'])
            txt_adjetivos = tolkien.texto_tweet_adjetivos_discurso(
                freq['adjtxt'])

            # armo tweet con top 15 de terminos
            path_imagen_sustantivos = os.getcwd(
            ) + '/imagenes/sustantivos_discurso' + subfijopng + '.png'
            etiquetas_sustantivos = [
                nombre for nombre, m in freq['sustxt'].items()
            ][:15]
            data_sustantivos = [m for nombre, m in freq['sustxt'].items()][:15]
            visu.lollipop(path=path_imagen_sustantivos,
                          colormap=visu.cmap_del_dia(),
                          titulo="Frecuencia de sustantivos",
                          etiquetas=etiquetas_sustantivos,
                          unidad="cantidad de apariciones",
                          valfmt="{x:.0f}",
                          data=data_sustantivos)
            tw_terminos = {
                'texto': txt_sustantivos,
                'media': [path_imagen_sustantivos]
            }

            # armo tweet con top 15 de verbos
            path_imagen_adjetivos = os.getcwd(
            ) + '/imagenes/adjetivos_discurso' + subfijopng + '.png'
            etiquetas_adjetivos = [
                nombre for nombre, m in freq['adjtxt'].items()
            ][:15]
            data_adjetivos = [m for nombre, m in freq['adjtxt'].items()][:15]
            visu.lollipop(path=path_imagen_adjetivos,
                          colormap=visu.cmap_del_dia(),
                          titulo="Frecuencia de adjetivos",
                          etiquetas=etiquetas_adjetivos,
                          unidad="cantidad de apariciones",
                          valfmt="{x:.0f}",
                          data=data_adjetivos)
            tw_verbos = {
                'texto': txt_adjetivos,
                'media': [path_imagen_adjetivos]
            }

            # el CM twittea
            cm.twittear_hilo(cuenta, [tw_intro, tw_terminos, tw_verbos])
Пример #8
0
    def postear_en_discursosdeaf(self, fecha):
        resultados = Resultados()
        kiosco = Kiosco()
        visu = Visualizador()
        tolkien = Escritor()

        # recupero frecuencias del discurso
        freqs = resultados.bd.frecuencias_discursos.aggregate([{
            '$match': {
                'presidente': 'alberto',
                'fecha': fecha
            }
        }])

        if not bool(freqs):
            return

        cm = CM()
        for freq in freqs:

            # recupero texto del discurso
            discurso = kiosco.noticias(diario='casarosada', url=freq['url'])[0]

            # armo tweet con el discurso en imagenes
            texto = " ".join(
                re.split("\s+", discurso['texto'], flags=re.UNICODE))
            paths_imagenes = visu.texto_en_imagenes(
                texto, 'calibri.ttf', 17, 800, 600,
                os.getcwd() + "/imagenes/introaf")
            tw_intro = {
                'texto':
                "Discurso del " + tolkien.separar_fecha(fecha=freq['fecha']) +
                " de #AlbertoFernández. Hilo 👇",
                'media':
                paths_imagenes
            }

            # armo textos del tweet
            txt_sustantivos = tolkien.texto_tweet_sustantivos_discurso(
                freq['sustxt'])
            txt_adjetivos = tolkien.texto_tweet_adjetivos_discurso(
                freq['adjtxt'])

            # armo tweet con top 15 de terminos
            path_imagen_sustantivos = os.getcwd(
            ) + '/imagenes/sustantivos_discursoaf.png'
            etiquetas_sustantivos = [
                nombre for nombre, m in freq['sustxt'].items()
            ][:15]
            data_sustantivos = [m for nombre, m in freq['sustxt'].items()][:15]
            visu.lollipop(path=path_imagen_sustantivos,
                          colormap=visu.cmap_del_dia(),
                          titulo="Frecuencia de sustantivos",
                          etiquetas=etiquetas_sustantivos,
                          unidad="cantidad de apariciones",
                          valfmt="{x:.0f}",
                          data=data_sustantivos)
            tw_terminos = {
                'texto': txt_sustantivos,
                'media': [path_imagen_sustantivos]
            }

            # armo tweet con top 15 de verbos
            path_imagen_adjetivos = os.getcwd(
            ) + '/imagenes/adjetivos_discursoaf.png'
            etiquetas_adjetivos = [
                nombre for nombre, m in freq['adjtxt'].items()
            ][:15]
            data_adjetivos = [m for nombre, m in freq['adjtxt'].items()][:15]
            visu.lollipop(path=path_imagen_adjetivos,
                          colormap=visu.cmap_del_dia(),
                          titulo="Frecuencia de adjetivos",
                          etiquetas=etiquetas_adjetivos,
                          unidad="cantidad de apariciones",
                          valfmt="{x:.0f}",
                          data=data_adjetivos)
            tw_verbos = {
                'texto': txt_adjetivos,
                'media': [path_imagen_adjetivos]
            }

            # el CM twittea
            cm.twittear_hilo('discursosdeaf',
                             [tw_intro, tw_terminos, tw_verbos])
Пример #9
0
def subir_historicos(path_discursos_historicos):
    buffer_kiosco = []
    buffer_resultado = []

    resultados = Resultados()
    freqs = Frecuencias()
    k = Kiosco()
    bd = k.bd
    total = 0
    agregados = 0
    with open(path_discursos_historicos) as f:
        for linea in f:
            total += 1
            jdiscurso = json.loads(linea)

            texto = jdiscurso['texto']

            if not texto:
                continue

            diario = jdiscurso['diario']
            url = jdiscurso['url']
            titulo = jdiscurso['titulo']

            fecha = datetime.datetime.strptime(jdiscurso['fecha']['$date'], '%Y-%m-%dT%H:%M:%SZ')

            # if fecha.strftime('%Y%m%d%H%M%S') > '20071206233745':
            #     continue

            sfecha = fecha.strftime('%Y%m%d')
            seccion = ""
            if sfecha >= "20191210":
                seccion = "alberto"

            if sfecha < "20191210" and sfecha >= "20151210":
                seccion = "macri"

            if sfecha < "20151210" and sfecha >= "20071210":
                seccion = "cristina"

            if sfecha < "20071210":
                seccion = "nestor"

            # if self.contar_noticias(diario=diario, secciones=seccion, url=url):
            #     continue
            if seccion != "nestor":
                continue

            if resultados.bd.frecuencias.find_one({'diario': diario, 'seccion': seccion, 'fecha': fecha.strftime('%Y%m%d%H%M%S'), 'url':url}):
                continue

            while resultados.bd.frecuencias.find_one({'diario': diario, 'seccion': seccion, 'fecha': fecha.strftime('%Y%m%d%H%M%S')}):
                fecha += datetime.timedelta(seconds=10)

            while existe_fecha(fecha, buffer_resultado):
                fecha += datetime.timedelta(seconds=10)

            # buffer_kiosco.append({'diario': diario, 'cat':seccion, 'fecha': fecha, 'url':url, 'titulo':titulo, 'texto':texto})

            # if len(buffer_kiosco) >= 100:
            #     self.bd.noticias.insert_many(buffer_kiosco)
            #     agregados += 100
            #     buffer_kiosco = []
            #     print('total procesados: ' + str(total) + '. agregados ' + str(agregados) + ' en total en Kiosco')

            f_ter_tit, f_ver_tit, f_per_tit, f_ter_txt, f_ver_txt, f_per_txt = freqs.tituloytexto2freqs(titulo,texto)

            buffer_resultado.append({'diario':diario, 'seccion': seccion, 'fecha': fecha.strftime('%Y%m%d%H%M%S'), 'url':url, 'f_ter_tit': f_ter_tit, 'f_ver_tit': f_ver_tit, 'f_per_tit': f_per_tit, 'f_ter_txt': f_ter_txt, 'f_ver_txt': f_ver_txt, 'f_per_txt': f_per_txt})

            if len(buffer_resultado) >= 100:
                resultados.bd.frecuencias.insert_many(buffer_resultado)
                agregados += 100
                buffer_resultado = []
                print('total procesados: ' + str(total) + '. agregados ' + str(agregados) + ' en total en Resultados')

    if len(buffer_resultado):
        bd.noticias.insert_many(buffer_resultado)
        print('total procesados: ' + str(total) + '. agregados ' + str(agregados+len(buffer_kiosco)) + ' en total en Resultados')

    print('fin')