Innovyze, an Autodesk company
Connecting Waterpeople
Prefabricados Delta
Sacyr Agua
ABB
Elmasa Tecnología del Agua
Schneider Electric
Red Control
s::can Iberia Sistemas de Medición
Xylem Water Solutions España
EPG Salinas
ICEX España Exportación e Inversiones
TEDAGUA
Blue Gold
Fundación CONAMA
LACROIX
GS Inima Environment
AZUD
Vector Motor Control
AGENDA 21500
SCRATS
J. Huesa Water Technology
Elliot Cloud
Fundación Botín
Lama Sistemas de Filtrado
Regaber
Insituform
Fundación Biodiversidad
DAM-Aguas
Ingeteam
AG-ZOOM
IAPsolutions
AMPHOS 21
Danfoss
DATAKORUM
Likitech
STF
Isle Utilities
Idrica
Cajamar Innova
Saleplas
Gestagua
Barmatec
biv Innova
BACCARA
CALAF GRUP
NTT DATA
Molecor
Smagua
HANNA instruments
SEAS, Estudios Superiores Abiertos
ISMedioambiente
Kamstrup
AECID
Terranova
Aigües Segarra Garrigues
Cibernos
Redexia network
EMALSA
Minsait
TecnoConverting
ADECAGUA
Grupo Mejoras
Mancomunidad de los Canales del Taibilla
FLOVAC
Baseform
Almar Water Solutions
Consorcio de Aguas de Asturias
Bentley Systems
ONGAWA
TFS Grupo Amper
ACCIONA
UNOPS
Hach
Laboratorios Tecnológicos de Levante
VisualNAcert
Rädlinger primus line GmbH
Confederación Hidrográfica del Segura
NOVAGRIC
Agencia Vasca del Agua
Kurita - Fracta
IIAMA
FENACORE
UPM Water
CAF
Aganova
Saint Gobain PAM
Ulbios
Catalan Water Partnership
Fundación We Are Water
BELGICAST by TALIS
Filtralite
Global Omnium
Centro Nacional de Tecnología de Regadíos (CENTER)
Asociación de Ciencias Ambientales
Hidroconta
Aqualia
Innovyze, an Autodesk company
ITC Dosing Pumps
Control Techniques
ESAMUR

Sobre el blog

José María de Cuenca de la Cruz
Curioso, inquieto y creativo… aprendiz de escritor, e interesado también por las nuevas tecnologías y la educación. Me encanta asumir retos y compartir lo aprendido. Trabajando en lo que me apasiona…. me siento como un pez, en el agua claro.

Solamente los necios que ya temen tener colaboradores más inteligentes que ellos deberían temer a los nuevos sistemas de inteligencia artificial.

En el cuarto post de esta serie ya apunté sobre su capacidad para ayudarnos a aprender y mantener nuestro desarrollo profesional. Una razón es porque nos aportan su potencia para detectar patrones temporales y encontrar explicaciones a los acontecimientos. Otra razón es su capacidad para registrar y analizar gran cantidad de observaciones mucho más rápido de lo que humanamente podemos hacerlo. Al fin y al cabo, muchas soluciones IA encuentran casi un alter ego en el Big Data, no solo por el volumen de información que utilizan, sino también por lo efímero de esa cantidad ingente de datos, que se genera a gran velocidad y casi al mismo ritmo puede caducar sin aprovecharse.

Creo que hoy, si hay algo voluble, es la opinión pública. Es una creencia general que solo la moda, lo mudable, lo contemporáneo, mueve el mercado. Y esto, aunque solo es cierto para algunos productos, ha sido suficiente para que apenas hace una década se definiesen las primeras profesiones del márquetin digital. Hoy su labor y esa creencia se han extendido a todos los sectores. Pero el desarrollo de estas profesiones, especialmente las que se centran en el uso de redes sociales, es impensable sin el apoyo de los sistemas de análisis de grandes volúmenes de datos e IA. Ya sean simples indicadores que contabilizan las interacciones recibidas del público, hasta sistemas que pueden interactuar con el usuario, al estilo de los asistentes virtuales que vimos justo en el post anterior.

En esta ocasión vamos a ver una aplicación a medio camino: el análisis de sentimientos, o lo que es lo mismo, de las opiniones –positivas o negativas- que se publican sobre un servicio de aguas. Estar informado es necesario para poder actuar, sea para adecuar nuestra forma de comportarnos, o para decidir la realización de una acción. Por ello la lectura de la prensa o sus resúmenes tradicionalmente es una de las primeras tareas que se realizan a diario en ciertos puestos de trabajo. Desde siempre, esa preocupación por la imagen que el servicio proyecta en la sociedad se variaba cíclicamente, disminuyendo en épocas de estío y rebotando fuertemente al aproximarse unas elecciones… Pero con las redes sociales esos brotes periódicos se han convertido en una pandemia, que nos puede llevar en los casos más graves, incluso a perder el sentido común, al erosionar nuestras percepciones de la conveniencia, la importancia y la urgencia.

Si has observado el estrés que puede producir esa info-dependencia, deberías intuir que un sistema de IA que trabaje para nosotros, en vez de exponernos a sobre dosis con lo que cree puede interesarnos (recuerda el funcionamiento de Google en el primer post de esta serie), puede sernos más útil y benefactor que resultarnos una amenaza profesionalmente apocalíptica.

Como siempre, el código con el ejemplo puede obtenerse en este enlace. Para esta ocasión utilizaremos la librería NLTK para procesar el lenguaje natural, es decir, la forma normal que usamos para comunicarnos entre personas. Y no hay ningún conjunto de datos o dataset: el contenido a analizar se tomará de la red, en función de las últimas noticias que recoja sobre el servicio de aguas El Norte de Castilla, periódico decano de la ciudad de Valladolid… Esperemos que sean siempre favorables.

El primer paso es obtener la información. Usaremos el caso ideal, que es consultar la hemeroteca de El Norte, ordenando por fecha en orden interno, y tomando solo la primera página de resultados que ofrece. De manera será el servidor web del periódico el que nos ahorre el trabajo de desarrollar un código para seleccionar las noticias que hablan de nosotros y quedarnos con las más recientes.

La respuesta será una página con código HTML, ya que al hacer la consulta el servidor no diferenciará nuestro sistema con un usuario real consultando con su navegador. Ese código lo almacenaremos en un objeto específico tipo soup para poder manejarlo sin problemas sintácticos.

A continuación, deberemos preparar el HTML obtenido para analizar “sentimentalmente” su contenido. Lo simplificaremos quedándonos solo con los titulares, donde se concentra la carga emocional del mensaje. En este caso, en el código se identifican como cabeceras h2, aunque esto puede variar según la maquetación de la página consultada. También dejamos únicamente los titulares, que se diferencian al situarse entre los marcadores HTML <a…> y , suprimiendo el resto.

Hecho esto, podemos comenzar con el análisis del texto resultante. Vamos recorriendo cada línea, extrayendo sus palabras a una lista, en minúsculas para reducir las variaciones y eliminando los signos de puntuación. Como solo deseamos las palabras relevantes, eliminamos las palabras vacías o stopwords, como por ejemplo artículos, preposiciones, etc. La eliminación se hace mediante comparación entre la lista de palabras obtenida de los titulares y la de palabras irrelevantes, a la que añadimos en este caso otras como “Valladolid” o “aguas”, porque al fin y al cabo, ya sabemos que probablemente aparecerán al formar parte de la selección de noticias realizada en la hemeroteca. Obtenemos por fin una lista con las palabras relevantes de los titulares que nos dedican.

Sobre esa lista realizaremos el análisis automático de sentimientos. Podemos hacerlo con una librería en inglés –TextBlob- que asocia la polaridad de cada palabra con un sentimiento positivo o negativo. Como nuestro texto está en español, tendremos que realizar la traducción, simplemente añadiendo una orden al código. Para evaluar el sentimiento, añadimos en un contador un punto por cada palabra positiva, y lo restamos si es negativa…

Como la librería TextBlob se usa para analizar textos con mucha carga emocional, es normal que no siempre arroje un resultado concluyente. Aunque si se ejecuta de nuevo, al tomar las últimas noticias del periódico, esto podría cambiar. ¡Un aliciente más para decidirte a ejecutar tus propios códigos!. El resultado obtenido al ejecutar el código poco antes de publicarse este post en octubre de 2020 puede verse en el cuaderno Jupyter aquí. Si el navegador del equipo no lo visualiza a la primera, puede ser por contener objetos HTML dentro del mismo cuaderno (la respuesta de la hemeroteca). Para solucionarlo, podemos usar las opciones Raw o Blame de Github, aunque recomiendo encarecidamente descargarlo y verlo en su propio Jupyter.

Volviendo al funcionamiento de TextBlob: podemos decir que tiene un problema de neutralidad, por un lado derivado de su propósito general, que asigna las puntuaciones más altas a noticias más escandalosas que un corte de agua, aunque para nosotros pueda ser un mundo… y por otro debido a estar preparada para el idioma inglés. Para solucionar ese problema de neutralidad, en el ejemplo se define nuestra propia lista de palabras relevantes, con su polaridad y en español, incluyendo los conceptos habituales de nuestro sector. Para nosotros una avería, una inundación o una fuga no son buenas noticias, y afortunadamente no hemos tenido que enfrentarnos a cosas peores como atentados o decesos. La comparación por listas en este caso sí obtiene una puntuación concluyente sobre la opinión pública de nuestro servicio. Y además permite definir la sensibilidad del análisis realizado, en función de las palabras del signo predominante sobre el total. A cierre del código podíamos dormir tranquilos.

Dejo a la iniciativa de los lectores imaginar un sistema IA que en vez del periódico, analice las opiniones expresadas a través de Twitter. Incluso uno que combinando un asistente virtual como el del post anterior, pueda interactuar adaptando el estilo de sus respuestas de forma acorde con los sentimientos detectados.