18 febrero 2013

Un enorme HTML

Hace algunos años, mi amigo Logan Susnick me ofreció alojar gratis en su servidor a mis sitios web bradanovic.cl e infoarica.cl. Esos sitios son de antes que empezara con los blogs, o sea los actualizé por última vez hace más de 10 años pero son masivos, con muchos miles de archivos que con los años y los cambios de computador se terminaron perdiendo de mis discos locales. Por casualidad pasé a dar un vistazo a bradanovic.cl que no lo veía hace años y encontré que todavía tiene visitas todos los días. Entonces pensé que si el servidor de Logan tuviese problemas perdería definitivamente un montón de archivos y bueno, aunque son muy antiguos, uno nunca sabe si alguna vez los puede necesitar. Así es que he estado toda la tarde descargándolos a mi laptop, no llevo ni la mitad.

Esto me llevó a pensar en la enorme cantidad de información que anda dando vueltas por Internet y que podría ser aprovechada si alguien tuviese la paciencia de recolectarlos. Una de las cosas que me interesa es la información que se almacena en los foros de discusión, si lo pìensan bien esas son bases de datos gigantescas, pero no están estructuradas, así es que se necesita cierta inteligencia para extraer información -por ejemplo- para hacer una investigación económica o social.

Claro que un estadístico frecuentista me podría alegar que estudiando una pequeña muestra "corresctamente escogida" puede obtener predicciones más acertadas que con un censo. Creo que esas son puras estupideces, porque en economía y ciencias sociales esas muestras "correctamente escogidas" no existen, son pura ficción adornada con matemáticas.Por algo nadie ha podido desarrollar un modelo matemático que pronostique de manera consistente y acertada el precio futuro de una acción, y ese es un problema relativamente sencillo, comparado con otros a los que le aplican los mísmos métodos

Bueno, el caso es que hace tiempo que tengo la idea de hacer alguna investigación usando "Big Data" o sea analizando cantidades masivas de información en lugar del método tradicional de muestras y prueba de hipótesis, que en la mayoría de los casos de ciencias sociales me parece un fraude. Pensando como podría hacerlo, una primera idea fue analizar el contenido de los foros de viajes para caracterizar el turismo en América Latina, claro que lo hice de una manera sumamente rústica: revisando y contando a mano. De allí salió una entrada que llamé Radiografía del Turismo Sud Americano, donde analicé a mano unos 20.000 post de diferentes foros de viajes. Creo que con todos sus defectos la idea era buena para empezar y ahora me gustaría llevarla un paso más adelante.

Un análisis manual nunca será eficiente, porque no es factible hacer conteos y clasificaciones sofisticadas a mano, por ejemplo que tomen en cuenta el tiempo. Los hilos de discusión se dan en períodos distintos de tiempo: alguien postea una duda y a veces se la contestan en un mes, otras veces la contestan enseguida. Clasificar toda esa información a mano  no sería factible. Si consideramos que el foro Thorn Tree de Lonely Planet tiene cientos de miles de consultas y respuestas. Es de esas cosas que no se pueden hacer sin computador.

Si tuviera acceso al servidor de Lonely Planet, donde los post se guardan en una base de datos bien estructurada y pueden ser clasificados por tema o lo que sea usando SQL no sería problema. Pero ese no es el chiste, la gracia es capturar los datos desde la web -sin estructura-  y poder analizarlos usando solo un browser ¿se podrá?.

No tengo idea pero se me ocurre algo, si estoy mal que un computin me desmienta: supongamos que logro descargar las 500 o 1000 páginas del foro Lonely planet, cada página con unos  20 post. Esas páginas estan en HTML, o sea en texto, así es que las podría pegar en un enorme archivo de texto que incluya todas esas páginas, una después de otra. Un solo archivo. Luego le extraigo string seleccionados aprovechando las caracterñisticas de Pyton para eso, por ejemplo podría extraer todos los string que contengan "Chile", luego le extraigo la o las ciudades que se mencionan a continuación y la fecha, todo eso lo voy poniendo en una lista.

Y bueno, teniendo los string en listas los podría pasar a una hoja Excel y todo el análisis sería pan comido. Podría presentar los resultados en gráficos de Google Earth como este.


En fin, creo que es una idea interesante y las conclusiones pueden ser mil veces más valiosas que los estudios chantas que se hacen en base a muestras y encuestas, que llenan las revistas indexadas con cuentos de hadas disfrazados de investigación. Creo que es una idea que vale la pena, y se puede generalizar, para extraer información de la web sin necesidad de tener acceso a los servidores, creo que esa sería la idea interesante: capturar información sin necesidad de algún acceso especial a los servidores, solo desde la web

Por ejemplo se podrían hacer estudios de marca, de fallas o reclamos sobre productos. Me imagino que algo así ya deben estar usando para propósitos políticos, creo que hay empresas que monitorean Twitter pero eso es muy básico, lo interesante sería obtener alguna información estructurada desde fuentes dispersas, que se pueda procesar. Creo que hay software que puede descargar sitios completos, concatenar las páginas en un gran archivo de texto tampoco sería mucho problema y extraer los strings de interés con Python menos. En fin, creo que hoy voy a soñar con inmensos archivos de texto plano que se covierten en información estructurada en una hoja de Excel. Me voy a dormir ahora mismo, antes que se me olvide el sueño. Hasta mañana.

9 comentarios:

  1. En ese mapa Google de "Pytohn for informatics" o algo así ¿la marca azul con punto negro en el norte de Chile es Ud.? - A mi me llama la atención la marca en el océano Indico, al Este de Madagascar. Quizás en la Isla de la Reunión, patria de Emile Hugot, autor de "Manual para Ingenieros Azucareros" y uno de mis héroes.
    No es posible mejorar el Todo con una Parte bien escogida por el Principio de Maxima Entropía. (creo)

    ResponderBorrar
  2. Efectivamente Ulschmidt, el azul en Arica soy yo mismo (terminé de los primeros), muchos que son preocupados por su privacidad colocaron su unicación en Groenlandia o la Antartida, a mi que me da lo mismo si alguien quiere venir a poner una bomba a mi casa, la puse en la dirección exacta y haciendo un zoom en la página original https://online.dr-chuck.com/map.php?course_id=2 se puede ver que el globo está ubicado justo sobre mi escritorio :)

    No nunca he tragado el uso de prueba estadística de hipótesis en ciencias sociales, me parece que es una gran mentira por varias razones, especialmente porque un supuesto fundamental es que las variables deben ser perfectamente independientes. En ciencias sociales, economía, etc. no existen esas variables "limpias" y parece que ni siquiera en las ciencias exactas existen, la independencia es solo aparente y una aproximación: en el mundo real todo depende de todo.

    ResponderBorrar
  3. .. es interesante lo del Big Data - aunque los detalles técnicos de lo que Ud. describe se me escapan.
    A veces he pensado - a la hora de pensar tonteras - que los buscadores como el Google permiten un amplio estudio de mercado a condición de que se desanden sus resultados. Desde una computadora sin cookies - o sea sin un estudio previo de la personalidad del usuario habitual de esa terminal - el Buscado nos devolverá la respuesta típica regional a cada pregunta. La misma pregunta efectuada en distintos idiomas, la misma pregunta efectuada desde distintas regiones nos arrojará mucha información sobre qué piensa o qué busca de cada tema el habitante de cada región. En la película "La Casa Rusia" el espía debe llevar una lista de preguntas al infidente, la KGB atrapa al infidente pero deja que la reunión se realize de todas formas. "¿ Para qué querrían ver nuestra lista de preguntas?" - le dice un espía yankee a su socio inglés. "Les dirá lo que sabemos, lo que no sabemos, lo que queremos saber, lo que creemos saber. Nuestras preguntas les darán casi tanta información como a nosotros nos darían sus respuestas"
    Bueno, yo creo que un montón de cosas se le pueden sonsacar a los Buscadores. Leyendo foros de turistas - como los que Ud. exploró - yo descubrí que en Jujuy existe un lugar llamado Serranía del Hornocal y que a los turistas europeos pero particularmnete a los franceses los deja maravillados. Esta a pocos kilómetos de la ruta tradicional de turismo y ni el gobierno nacional o provincial arreglan siquiera el camino de acceso. No tienen ni idea de que lo que dejan de lado ni les importa. Sus ofertas son diseñadas por intereses ya establecidos o por encuestas diseñadas para confirmar los lugares comunes y la sagacidad de los funcionarios. Un mecanimso para no-enterarse.

    ResponderBorrar
  4. Claro Ulschmidt, en Google la tienen mucho más fácil porque ellos tienen la base de datos ya estructurada en sus servidores, no necesitan explorar nada. Por ejemplo tienen acceso a todos los mail (completos, contenidos, origen, destino, etc.) de millones de cuentas, además están indexados, esa es información que vale oro y no tienen ninguna restricción legal para examinarla y usarla como mejor les parezca mientras no la hagan pública.

    Los fundadores de Google tuvieron una gran intuición al cambiar el modelo de negocio de los buscadores desde una vitrina publicitaria convencional a una cosechadora de información.

    La gracia es que cualquiera puede hacer algo similar a lo que hace Google, es relativamente sencillo programar un web crawler que se mueva por todas las páginas HTML de un dominio, las descargue, las indexe y las analice para extraer información SIN NECESIDAD de tener acceso a los servidores.

    Es como automatizar lo que hacemos manualmente cuando buscamos información, revisamos páginas. recuperamos solo lo que nos interesa y finalmente analizamos. Todo eso se puede hacer "cosechando" las páginas que están en la web y automatizando lo que hacemos manualmente, gracias a lenguajes como Python que hacen fácil algo sumamente útil: extraer automáticamente trozos de un gran documento con texto plano, creo que esa es una de las mayores gracias de Python que hace fácil automatizar algo que hacemos manualmente a cada rato

    ResponderBorrar
  5. La gracia de google son precisamente los algoritmos de análisis semántico. El bicho usa Bayes para casi todo.

    ResponderBorrar
  6. Malandra/Malevo en el teclado20 febrero, 2013 16:00

    Tommy Boy:

    ¿Un string? Eso se justificaría si quieres enfrentarte a páginas web con formatos desconocidos. Si los foros de los que quieres sacar info están hechos de manera ordenadita, quizás la cosa es más fácil y con un DOM parser tal vez te ahorras buena parte del trabajo. No en vano, parece que Google se vale de cosas como Persondata cuando quiere sacar info relevante de la Wikipedia y ponerla en el costado derecho, cuando coincide con la búsqueda que haces...

    ResponderBorrar
  7. Leus, supongo que esas son estadísticas con la frecuencia de determinadas palabras, claro, puede ser una herramienta. Otra sería tratar de replicar lamims aclase de inspección que uno hace cuando busca en la web (digamos cuando busco información en un gran foro) pero programándo la inspección, o sea que el programa replique lo que hacemos manualmente.

    Malandra, pero los DOM parser funcionan solo con XML bien formados, disculpa mi "falta de disnorancia" si me equivoco, el problema aquí sería recolectar información dispersa en muchas páginas web sin pedirle permiso ni nada al dueño del sitio. Claro, si las páginas web están en XML estaría bueno tal como tu dices, pasarlas a un excel sería re fácil con un parser o algo así.

    ResponderBorrar
  8. (Ptas, había escrito una sesuda respuesta que me la comieron los ratones. A ver si la neurona me vuelve a funcionar).

    Hay HTML parsers bastante tolerantes a los documentos mal formados. Leen casi todo. Pero el problema sigue siendo semántico; es cosa de buscar "untitled document" en Google. Al final necesitas hacer cierto análisis sobre el texto, y con reglas fijas te llenas de lógica hasta por los codos.

    Esto implica que si tu problema es bien acotado y definido no hay problema en hacer análisis determinístico; un buen HTML parser y algo de magia con expresiones regulares funciona re bien. Pero a medida que la complejidad de tu problema aumenta, te empiezas a llenas de código para manejar la mayor cantidad de casos de borde posible, y llega un momento en que se hace inmanejable o la performance te afecta demasiado.

    En mis tiempos mozos hice un "crawler" en Windows para encontrar ciertos datos de varias páginas (precio de la UF, dólar, UTM, dígitos de la restricción, etc.) para actualizar un portal de ayuda. Como las reglas para parsear esto cambiaban muy seguido (¡esto fue antes de los Web Services!) le incorporé la gracia de Windows Scripting Host, que te permitía correr un script con las reglas. Como WSH soporta varios lenguajes, le instalé Perl y funcionaba de perillas.

    (Un amigo se consiguió un pituto con este programa - la gracia es que cobraba casi 100 lucas por cada script chiquitito, o sea, por cada "regla"! Yo me llevé mis luquitas también.)

    En fin, ya me puse a desvariar. ¡Vengo recién llegando de vacaciones!

    (Como puedes ver, me interesa un poco este tema).

    ResponderBorrar
  9. Leus, yo creo que cuando tratan de ponerle demasiada "inteligencia" el asunto inevitablemente se chinga. Los computadores no son inteligentes y son pésimos para "pensar", se atascan en las decisiones más sencillas, esa es nuestra pega, de los humanos. Recuerdo en los ochentas cuando los orgullosos japoneses lanzaron la iniciativa de AI que iba a cambiar el mundo: un fiasco total.

    Pero su gran poder está en hacer lo repetitivo con extremada rapidez. La inteligencia debe estar en el diseño, en escoger bien la aplicación y diseñarla aprovechando lo que los computadores hacen mejor. Cuando Cerf empezó a hablar de la web semántica.. bueno, la idea es buena siempre que no se pase de revoluciones y se enrede como ha ocurrido con tantos intentos de IA, el uso extenso de tags puede ser muy útil, pero la gente rara vez se molesta en ponerlos (yo mismo dejé de usar tags acá hace como un año).

    ¡Las expresiones regulares! son una gran herramineta, en línea con lo que los computadores hacen bien: buscar y seleccionar con criterios claros, no ambiguos, los computadores están lejos de manejarse bien con la ambiguedad, hasta una guagua les gana en eso.

    Por ejemplo hay muchas aplicaciones sencillas pero muy potentes que casi no se hacen, como lo que dices de un crawler que recoja datos para luego analizarlos, eso en economía le llaman "indicadores líderes" como el Imacec creo, que en lugar de encuestar estadísticamente hacen un censo de algunos indicadores de las empresas con datos del banco central. ¡Con Internet eso se puede hacer para varias cosas que a mano serían imposibles!

    Por ejemplo para hacer estudios de precios y costo de vida, a medida que suba la cantidad de información de precios en la web el IPC ya no necesitará ser encuestado.

    Hay mucho que hacer en esto como la aplicación que tu hiciste, es como salir a recolectar hongos al campo, pero en lugar de hacerlo a mano, mandar un robot.

    ResponderBorrar

"Send me a postcard, drop me a line
Stating point of view
Indicate precisely what you mean to say
Yours sincerely, wasting away
Give me your answer, fill in a form
Mine for evermore
Will you still need me, will you still feed me
When I'm sixty-four"