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 de caractères. sentence est une liste de mots représentant une phrase tirée d’un manuel. La colonne out contient le dernier mot de sentence. La colonne in est obtenue en retirant le dernier mot de sentence.
Le model de CountVectorizer attend un dataframe contenant une colonne words et crée une colonne vec.
Vous allez d’abord effectuer une transformation qui ajoute une colonne invec, ce qui donne :
+----------------------+-------+------------------------------------+
|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
Ensuite, vous effectuerez une seconde transformation, qui donne :
+------------------------------------+----------------+
|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
Cet exercice fait partie du cours
Introduction à Spark SQL en Python
Instructions
- Créez un dataframe appelé
resulten utilisantmodelpourtransform()df.resultcontient les colonnessentence,in,outetinvec.invecest la transformation vectorielle de la colonnein. - Ajoutez une colonne à
resultappeléeoutvec.resultcontient maintenant les colonnessentence,in,out,invecetoutvec.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# 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)