Tekst omzetten naar vectorformaat
Je hebt geleerd hoe je zinnen splitst en een array van woorden omzet naar een numerieke vector met een CountVectorizer.
Er is een dataframe df beschikbaar met de kolommen: sentence, in en out. Elke kolom is een array van strings. sentence is een lijst met woorden die samen een zin uit een tekstboek vormen. De kolom out geeft het laatste woord van sentence. De kolom in is verkregen door het laatste woord uit sentence te verwijderen.
Het CountVectorizer-model verwacht een dataframe met een kolom words en maakt een kolom vec aan.
Je voert eerst een transform uit die een kolom invec toevoegt, die er als volgt uitziet:
+----------------------+-------+------------------------------------+
|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
Daarna voer je een tweede transform uit, die er als volgt uitziet:
+------------------------------------+----------------+
|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
Deze oefening maakt deel uit van de cursus
Introductie tot Spark SQL in Python
Oefeninstructies
- Maak een dataframe
resultdoormodelte gebruiken omtransform()opdftoe te passen.resultheeft de kolommensentence,in,outeninvec.invecis de vectortransformatie van de kolomin. - Voeg aan
resulteen kolomoutvectoe.resultheeft nu de kolommensentence,in,out,invecenoutvec.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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)