No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Aprende Ingl茅s, Programaci贸n, AI, Ciberseguridad y mucho m谩s.

Antes: $249

Currency
$209
Suscr铆bete

Termina en:

2 D铆as
22 Hrs
49 Min
2 Seg

Usando c贸digo estructurado: Funciones externas

23/24
Recursos

Aportes 15

Preguntas 2

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Le hice una peque帽a modificaci贸n a la funci贸n freq_words usando el script html2text como alternativa al uso de BeautifulSoup, ya que me parece que tiene mejores resultados.

import nltk, re 
nltk.download('punkt')
from urllib import request
from nltk import word_tokenize

def install(html2text): #Aunque no es buena pr谩ctica instalar desde el archivo, funciona con la librer铆a subprocess 
    subprocess.check_call([sys.executable, "-m", "pip", "install", html2text])

#!pip install html2text  #Esta es la forma de instalar el script desde el entorno de ejecuci贸n de Colab
import html2text


# la funcion la podemos definir en el notebook y usar directamente
def freq_words(url, n, encoding = 'utf8'):
  req = request.urlopen(url)
  html = req.read().decode(encoding)
  text = html2text.html2text(html)
  tokens = re.findall('\w+', text)
  tokens = [t.lower() for t in tokens]
  fd = nltk.FreqDist(tokens)
  return [t for (t, _) in fd.most_common(n)]

Le agregue tambien que eliminara los signos de puntuacion y los stopwords, ya que sin eso los primeros 20 que tienen mas frecuencia son signos de puntuacion y stopwords.

from urllib import request
import re
from bs4 import BeautifulSoup
import nltk
from nltk import word_tokenize
from string import punctuation
from nltk.corpus import stopwords

def get_text(file):
  #Read text from file...
  text = open(file).read()
  text = re.sub(r'<.*?', ' ', text)
  text = re.sub(r'\s+', ' ', text)
  return text

def freq_words(url, n):
  req = request.urlopen(url)
  html = req.read().decode('utf8')
  raw = BeautifulSoup(html, 'html.parser')
  stop_words = stopwords.words('english')
  text = raw.get_text()
  tokens = word_tokenize(text)
  tokens = [token.lower() for token in tokens]
  tokens = [token for token in tokens if token not in punctuation]
  tokens = [token for token in tokens if token not in stop_words]
  fd = nltk.FreqDist(tokens)
  return [t for (t, _) in fd.most_common(n)]

El signo de exclamaci贸n 芦!禄 en nuestro entorno de ejecuci贸n en Colab nos permite ejecutar comandos Bash como si lo hici茅ramos desde nuestra l铆nea de comandos local (o consola). Basta con a帽adir 芦!禄 delante de comando que queremos ejecutar en Colab. Dos ejemplos:

!git clone     #traernos nuestro proyecto desde GitHub a nuestro entorno de Google Colab 
!pip install    #Si necesitamos instalar con el gestor de paquetes pip de Python alguna librer铆a que no venga preinstalada en Colab

Al hacer el ejercicio me encontr茅 con varios problemas:

  1. Es necesario importar word_tokenize de nltk
  2. Tambi茅n se debe descargar el recurso 鈥榩unkt鈥
  3. Cuando hac铆a cambios en el archivo que conten铆a el m贸dulo, al volver a correr el import segu铆a teniendo errores porque realmente no se estaba actualizando la dependencia, como si quedara en alg煤n tipo de cach茅. Para obligar a que cargara de nuevo fue necesario usar el siguiente c贸digo:
from importlib import reload
reload(freq_words)

Espero que pueda ayudar a algunos que est茅n varados

![](

Tengo un tutorial que escribi en otro curso respecto a los python Magics, ojala les apoye en su formaci贸n

https://platzi.com/tutoriales/1794-pandas/6960-ipython-magics-commands/

Muy buena estas dos clases.
Me ayuda un monton!

from urllib import request
from bs4 import BeautifulSoup

def freq_words(url, n, threshold):
  req = request.urlopen(url)
  html = req.read().decode('utf8')
  raw = BeautifulSoup(html, 'html.parser')
  text = raw.get_text()
  text = re.sub(r'<.*?>', ' ', text)
  text = re.sub(r'\s+', ' ', text)
  text = re.sub(r'function', ' ', text)
  text = re.sub(r'return', ' ', text)
  text = re.sub(r'target', ' ', text)
  text = re.sub(r'class', ' ', text)
  text = re.sub(r'sas_*', ' ', text)
  tokens = word_tokenize(text)
  tokens = [t.lower() for t in tokens if len(t) > threshold]
  fd = nltk.FreqDist(tokens)
  return [t for (t, _) in fd.most_common(n)]```

Wow genial, no conoc铆a esta forma de trabajar con Google Collab!

Les dejo el codigo para usar si tienen que eliminar alguna libreria que hayan agregado por error

sys.path.remove('ruta de libreria a remover')

Espero les sirva

Estuvo muy genial este forma de trabajar en colab, al menos a mi me ser谩 muy funcional esta clase.
Gracias Francisco y Saludos!

Para los que estan trabajando en jupyter:
import re
def get_text(file):
text = open(file, 鈥渞鈥, encoding=鈥渦tf-8鈥).read()
text = re.sub(r鈥<.*?>鈥, 鈥 鈥, text)
text = re.sub(r鈥橽s+鈥, 鈥 ', text)
return text

`AttributeError: module 'read' has no attribute 'get_text'` Buenos dias comunidad, Les comparto un error que tuve y como se arreglo (digo "se" arreglo, porque no entiendo el origen del error, asi que si alguien me ayuda..bienvenido). El primer archivo se llama read.py y el segundo read2.py. La cuestion es que el primer archivo tira el error y el segundo no. Internamente, ambos archivos son identicos (de hecho copie y pegue el primero en el segundo) ![](https://static.platzi.com/media/user_upload/Error-dc75f89e-4801-41a7-a225-9d300ef2f5ad.jpg) Atino a pensar que no puedo usar el nombre read! pero bueno, lo dejo por si le sirve a alguien mas

para los que usan Jupyter Notebook este es el codigo para crear archivos

!type nul >read.py
import nltk
from nltk import word_tokenize
from urllib import request
from bs4 import BeautifulSoup
nltk.download("punkt")
def freq_words(url, n, threshold):
	req = request.urlopen(url)
	html = req.read().decode('utf8')
	raw = BeautifulSoup(html, 'html.parser')
	text = raw.get_text()
	text = re.sub(r'<.*?>', ' ', text)
	text = re.sub(r'\s+', ' ', text)
	text = re.sub(r'function', ' ', text)
	text = re.sub(r'return', ' ', text)
	text = re.sub(r'target', ' ', text)
	text = re.sub(r'class', ' ', text)
	text = re.sub(r'sas_*', ' ', text)
	tokens = word_tokenize(text)
	tokens = [t.lower() for t in tokens if len(t) > 		threshold]
	fd = nltk.FreqDist(tokens)
	return [t for (t, _) in fd.most_common(n)]