Text in Vektorformat umwandeln
Du hast gelernt, wie man Sätze aufteilt und ein Array von Wörtern mit einem CountVectorizer in einen numerischen Vektor umwandelt.
Es wird ein DataFrame df bereitgestellt mit den Spalten sentence, in und out. Jede Spalte ist ein Array von Strings. sentence ist eine Liste von Wörtern, die einen Satz aus einem Lehrbuch darstellen. Die Spalte out enthält das letzte Wort von sentence. Die Spalte in entsteht, indem das letzte Wort aus sentence entfernt wird.
Das CountVectorizer-model erwartet ein DataFrame mit einer Spalte words und erstellt eine Spalte vec.
Zuerst führst du eine Transformation durch, die eine Spalte invec hinzufügt. Das sieht wie folgt aus:
+----------------------+-------+------------------------------------+
|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
Dann führst du eine zweite Transformation durch, die so aussieht:
+------------------------------------+----------------+
|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
Diese Übung ist Teil des Kurses
Einführung in Spark SQL mit Python
Anleitung zur Übung
- Erstelle ein DataFrame namens
result, indem dumodelverwendest, umtransform()aufdfanzuwenden.resulthat die Spaltensentence,in,outundinvec.invecist die Vektortransformation der Spaltein. - Füge
resulteine Spalte namensoutvechinzu.resulthat jetzt die Spaltensentence,in,out,invecundoutvec.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# 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)