No tienes acceso a esta clase

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

Usando c贸digo estructurado: Funciones externas

23/24
Recursos

Aportes 13

Preguntas 2

Ordenar por:

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

o inicia sesi贸n.

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 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)]