Transformar texto a formato vectorial
Has aprendido a dividir oraciones y a transformar un array de palabras en un vector numérico usando un CountVectorizer.
Se proporciona un dataframe df con las siguientes columnas: sentence, in y out. Cada columna es un array de cadenas. sentence es una lista de palabras que representa una oración de un libro de texto. La columna out contiene la última palabra de sentence. La columna in se obtiene eliminando la última palabra de sentence.
El model de CountVectorizer espera un dataframe con una columna words y crea una columna vec.
Primero realizarás una transformación que añade una columna invec, que se ve así:
+----------------------+-------+------------------------------------+
|in |out |invec |
+----------------------+-------+------------------------------------+
|[then, how, many, are]|[there]|(126,[3,18,28,30],[1.0,1.0,1.0,1.0])|
|[how] |[many] |(126,[28],[1.0]) |
|[i, donot] |[know] |(126,[15,78],[1.0,1.0]) |
+----------------------+-------+------------------------------------+
only showing top 3 rows
Después realizarás una segunda transformación, que se ve así:
+------------------------------------+----------------+
|invec |outvec |
+------------------------------------+----------------+
|(126,[3,18,28,30],[1.0,1.0,1.0,1.0])|(126,[11],[1.0])|
|(126,[28],[1.0]) |(126,[18],[1.0])|
|(126,[15,78],[1.0,1.0]) |(126,[21],[1.0])|
+------------------------------------+----------------+
only showing top 3 rows
Este ejercicio forma parte del curso
Introducción a Spark SQL en Python
Instrucciones del ejercicio
- Crea un dataframe llamado
resultusandomodelparatransform()df.resulttiene las columnassentence,in,outeinvec.inveces la transformación vectorial de la columnain. - Añade una columna a
resultllamadaoutvec. Ahoraresulttiene las columnassentence,in,out,invecyoutvec.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# Transform df using model
result = model.____(df.withColumnRenamed('in', 'words'))\
.withColumnRenamed('words', 'in')\
.withColumnRenamed('vec', 'invec')
result.drop('sentence').show(3, False)
# Add a column based on the out column called outvec
result = model.transform(result.withColumnRenamed('out', 'words'))\
.withColumnRenamed('words', 'out')\
.withColumnRenamed('vec', '____')
result.select('invec', 'outvec').show(3, False)