Trasformare il testo in formato vettoriale
Hai imparato come suddividere le frasi e trasformare un array di parole in un vettore numerico usando un CountVectorizer.
È fornito un dataframe df con le seguenti colonne: sentence, in e out. Ogni colonna è un array di stringhe. sentence è un elenco di parole che rappresentano una frase tratta da un libro di testo. La colonna out fornisce l'ultima parola di sentence. La colonna in si ottiene rimuovendo l'ultima parola da sentence.
Il model di CountVectorizer si aspetta un dataframe con una colonna words e crea una colonna vec.
Per prima cosa eseguirai una trasformazione che aggiunge una colonna invec, che appare come segue:
+----------------------+-------+------------------------------------+
|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
Poi eseguirai una seconda trasformazione, che appare come segue:
+------------------------------------+----------------+
|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
Questo esercizio fa parte del corso
Introduzione a Spark SQL in Python
Istruzioni dell'esercizio
- Crea un dataframe chiamato
resultusandomodelpertransform()df.resultha le colonnesentence,in,outeinvec.invecè la trasformazione vettoriale della colonnain. - Aggiungi a
resultuna colonna chiamataoutvec. Oraresultha le colonnesentence,in,out,inveceoutvec.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# 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)