Ingestando noticias de mi propia web (Text Analytics basics ) — NLP Series parte 2 | por Carlos…

I have 2 podcast, Imperio Cloud Podcast (imperiocloud.com) and "Up-to-date with AWS" Podcast (aldiaconaws.cortez.cloud)
Search for a command to run...

I have 2 podcast, Imperio Cloud Podcast (imperiocloud.com) and "Up-to-date with AWS" Podcast (aldiaconaws.cortez.cloud)
No comments yet. Be the first to comment.
Aprenderemos NLP en AWS, desde cero con Sagemaker, librerías, notebooks severless, APIs y yo también iré aprendiendo en el camino como Hugging, SpaCy, NLTK y más!
Fuente: Imagen creada por Carlos Cortez, AWS Warrior Level 4 📢 Leveleando nuestro guerrero 3 niveles hoy! Soy Carlos Cortez y bienvenidos a la tercera entrega de estas series, pero, ¿qué me estás contando? Vamos a por 3 niveles más!, hoy aprenderemo...
It would be great to start segmenting our texts as well as the cover image, which is an Open Source software called Coreference created by Hugging Face, right? Let's go in parts ... In case you are interested in hearing about Hugging Face and SageMak...

Fuente: Imagen creada por Carlos Cortez, AWS Warrior Level 4 📢 Leveleando nuestro guerrero 3 niveles hoy! Soy Carlos Cortez y bienvenidos a la tercera entrega de estas series, pero, ¿qué me estás contando? Vamos a por 3 niveles más!, hoy aprenderemo...

Im also a mere mortal here so lets start!
Nació DeepFridays Qué es? Y quiénes somos? Somos 3! A la izquierda, Carlos Cortez (AWS UG Perú Leader & Founder), al centro Damian Olguín (AWS Hero), y a la derecha Matías Kreder (re:invent 2020 qualifier finalist) Unas series educativas para acerc...

De quiénes se ensucian las manos, ruedan en el barro, y se llenan de esa adrenalina de hacer las cosas tú mismo y no por un managed service de algún cloud provider. De quiénes pueden inventar sus propios métodos, sus propios principios y su propio camino. Yo te pregunto, ¿aún puedes seguir inventando si mezclas lo mejor de ambos mundos no?
Estas series son parte de una nueva sección llamada AI for Mortals, donde me incluyo con ustedes para enseñarles lo que voy aprendiendo.
Visitar AI for Mortals: (https://aiformortals.cortez.cloud)

Generaremos una ingesta de datos con información propia, tomada de mi blog https://cortez.cloud, para obtener categorías, títulos, y descripciones de los posts publicados.
Si estuviésemos en un MMORPG , nuestro guerrero aún estaría en Level 1:

Hagámoslo lo más simple posible pero no Simplón — Albert Einstein
y recordando dónde nos encontramos en nuestro viaje en este mundo:

Beautiful Soap, una librería de Python que nos ayudará a extraer data de la web, lo que llamamos “Web Scraping”
Veamos paso a paso que es lo que estamos haciendo aquí,
import requests
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import os
cortezcloud_urls = ['https://www.cortez.cloud/categories/fundamentals',
'https://www.cortez.cloud/categories/serverless',
'https://www.cortez.cloud/categories/awsugperu']
En una de las URLS, https://www.cortez.cloud/categories/awsugperu

Los títulos están en un <div class=”blog-title”>, y esto es lo que tenemos que ir buscando
cloud_category = url.split('/')[4]
data = requests.get(url)
soup = BeautifulSoup(data.content, 'html.parser')
news_blogs = [{'news_headline': headline.find('div',
attrs={"class": "blog-title"}).string,
'news_blog': blog.find('div',
attrs={"class": "preview-text"}).string,
'cloud_category': cloud_category}
df = pd.DataFrame(cortezcloud_data)
df = df[['news_headline', 'news_blog', 'cloud_category']]
ultimos_posts = ingestar_noticias(cortezcloud_urls)
ultimos_posts.head(10)

El código completo es el siguiente y lo puedes encontrar en mi github en Colab para que puedan editarlo y usarlo:
jupyter notebook
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Ingestando noticias de mi propia web.ipynb",
"provenance": [],
"authorship_tag": "ABX9TyPpymjo5tVL1p5qAm0AbRN5",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/ccortezb/315c16d6a61208229e0db3ffd095affe/ingestando-noticias-de-mi-propia-web.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "BBWvh-jVtn8J"
},
"source": [
"import requests\n",
"from bs4 import BeautifulSoup\n",
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import os\n",
"%matplotlib inline\n",
"\n",
"cortezcloud_urls = ['https://www.cortez.cloud/categories/fundamentals',\n",
" 'https://www.cortez.cloud/categories/serverless',\n",
" 'https://www.cortez.cloud/categories/awsugperu']\n",
"\n",
"def ingestar_noticias(cortezcloud_urls):\n",
" cortezcloud_data = []\n",
" for url in cortezcloud_urls:\n",
" cloud_category = url.split('/')[4]\n",
" data = requests.get(url)\n",
" soup = BeautifulSoup(data.content, 'html.parser')\n",
" \n",
" news_blogs = [{'news_headline': headline.find('div', \n",
" attrs={\"class\": \"blog-title\"}).string,\n",
" 'news_blog': blog.find('div', \n",
" attrs={\"class\": \"preview-text\"}).string,\n",
" 'cloud_category': cloud_category}\n",
" \n",
" for headline, blog in \n",
" zip(soup.find_all('div', \n",
" class_=[\"thumbnail-text\"]),\n",
" soup.find_all('div', \n",
" class_=[\"thumbnail-text\"]))\n",
" ]\n",
" cortezcloud_data.extend(news_blogs)\n",
" \n",
" df = pd.DataFrame(cortezcloud_data)\n",
" df = df[['news_headline', 'news_blog', 'cloud_category']]\n",
" return df\n"
],
"execution_count": 1,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 162
},
"id": "ERIXIl2ewiwn",
"outputId": "eb1495a0-7d4c-4671-b00f-c10b67558ebf"
},
"source": [
"ultimos_posts = ingestar_noticias(cortezcloud_urls)\n",
"ultimos_posts.head(10)"
],
"execution_count": 2,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>news_headline</th>\n",
" <th>news_blog</th>\n",
" <th>cloud_category</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2 Trabajando con Amazon DocumentDB desde mi local</td>\n",
" <td>Seguimos en las series de Docdb, esta vez, 2da...</td>\n",
" <td>fundamentals</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>5 cosas que necesitas empezar a aprender para ...</td>\n",
" <td>Aún no entiendes bien cómo empezar a migrar tu...</td>\n",
" <td>fundamentals</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Primeros pasos con Amazon DocumentDB y AWS CLI</td>\n",
" <td>Estas serán unas series donde hablaremos de un...</td>\n",
" <td>fundamentals</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Cómo me convierto en un AWS Community Builder ...</td>\n",
" <td>Empieza tu travesía para educar AWS en el Perú</td>\n",
" <td>awsugperu</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" news_headline ... cloud_category\n",
"0 2 Trabajando con Amazon DocumentDB desde mi local ... fundamentals\n",
"1 5 cosas que necesitas empezar a aprender para ... ... fundamentals\n",
"2 Primeros pasos con Amazon DocumentDB y AWS CLI ... fundamentals\n",
"3 Cómo me convierto en un AWS Community Builder ... ... awsugperu\n",
"\n",
"[4 rows x 3 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 2
}
]
}
]
}
Pasémoslo a Funciones como Servicio usando AWS Lambda y empecemos a automatizar y crear nuestros propios pipelines de ingesta de datos.
Lo puedes replicar para hacer ingesta en Twitter o de cualquier otra red social y empezar a generar tus propios análisis.
Nosotros nos iremos por la rama de Procesamiento de lenguaje natural tanto con librerías open source como con Amazon Web Services
Si en el próximo episodio, cambiamos de aires y nos vamos a Amazon Comprehend?
No se preocupen vamos paso a paso y alternando entre ambos caminos.
Doble click a nuestro MMORPG , nuestro guerrero tiene la meta de llegar a level 5:

Siguiente post: (Al Aire el 05 de Abril)
Post Anterior: Empezando con nlp en AWS desde cero
Si te gustó este post, dale un like, comparte y comenta.
Estas series son parte de una nueva sección llamada AI for Mortals, donde me incluyo con ustedes para enseñarles lo que voy aprendiendo.
Visitar AI for Mortals: (https://aiformortals.cortez.cloud)

Suscríbete a mi canal, Breaking the Cloud y Al día con AWS en https://cortez.cloud
⭐Suscríbete a mi canal : http://bit.ly/aldiaconaws
videos, noticas de AWS, análisis, demos, workshops
follow <- me()
🦜 Mi Twitter: https://twitter.com/ccortezb
📺 Youtube Channel: http://bit.ly/aldiaconaws
📺 AWSUGPerú: https://www.youtube.com/awsusergroupperuoficial
📟 Mi Facebook: https://www.facebook.com/ccortezb/
🤳 Mi Instagram: ccortezbazan
📜 Mis cursos de AWS: https://cennticloud.thinkific.com
🕮 Mi blog — cortez.cloud
Muchas gracias, espero nos volvamos a ver
Les presento mi pequeña web personal https://www.Cortez.Cloud llamado “Breaking the Cloud”.
Seguiré creando contenido cada semana de AWS sobre Al/ML, Serverless, Security y como romper las reglas!
También mis próximas iniciativas, talleres, cursos, videos gratuitos, awsugperu y más.