Transformer du texte en format vectoriel
Vous avez appris à découper des phrases et à transformer un tableau de mots en vecteur numérique à l'aide d'un CountVectorizer.
Un dataframe df est fourni avec les colonnes suivantes : sentence, in et out. Chaque colonne est un tableau de chaînes. sentence est une liste de mots représentant une phrase tirée d'un manuel. La colonne out donne le dernier mot de sentence. La colonne in est obtenue en retirant le dernier mot de sentence.
Le CountVectorizer model s'attend à un dataframe contenant une colonne words et crée une colonne vec.
Vous effectuerez d'abord une transformation qui ajoute une colonne invec, qui ressemble à ceci :
+----------------------+-------+------------------------------------+
|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
Vous effectuerez ensuite une deuxième transformation, qui ressemble à ceci :
+------------------------------------+----------------+
|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
Cette activité fait partie du cours
Introduction à Spark SQL en Python
Instructions de l’exercice
- Créez un dataframe appelé
resulten utilisantmodelpourtransform()df.resultcontient les colonnessentence,in,outetinvec.invecest la transformation vectorielle de la colonnein. - Ajoutez à
resultune colonne appeléeoutvec.resultcontient maintenant les colonnessentence,in,out,invecetoutvec.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# 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)