テキストをベクトル形式に変換する
CountVectorizer を使って、文を分割し、単語の配列を数値ベクトルに変換する方法を学びました。
データフレーム df が用意されており、sentence、in、out の各列があります。各列は文字列の配列です。sentence は教科書の文を表す単語リストです。out 列には sentence の最後の単語が入っています。in 列は、sentence の最後の単語を取り除いて得られます。
CountVectorizer の model は words という列を持つデータフレームを想定し、vec という列を作成します。
最初に、invec 列を追加する transform を行います。結果は次のようになります。
+----------------------+-------+------------------------------------+
|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
次に、2 回目の transform を行います。結果は次のようになります。
+------------------------------------+----------------+
|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
この演習はコースの一部です
Pythonで学ぶ Spark SQL 入門
演習の手順
modelを使ってdfにtransform()を実行し、resultというデータフレームを作成します。resultはsentence、in、out、invecの各列を持ちます。invecはin列をベクトル変換したものです。resultにoutvecという列を追加します。resultはsentence、in、out、invec、outvecの各列を持つようになります。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# 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)