将文本转换为向量格式
您已经学习了如何拆分句子,并使用 CountVectorizer 将词数组转换为数值向量。
已提供数据框 df,包含以下列:sentence、in 和 out。每一列都是字符串数组。sentence 是表示教科书中一句话的词列表。out 列给出 sentence 的最后一个词。in 列是从 sentence 中移除最后一个词后得到的。
CountVectorizer 模型 model 期望输入的数据框包含一列 words,并生成一列 vec。
您将先进行一次变换,添加名为 invec 的列,其结果如下所示:
+----------------------+-------+------------------------------------+
|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
然后您将进行第二次变换,结果如下所示:
+------------------------------------+----------------+
|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)