Chuyển văn bản sang dạng vector
Bạn đã học cách tách câu và biến một mảng từ thành vector số bằng CountVectorizer.
Một dataframe df được cung cấp với các cột: sentence, in, và out. Mỗi cột là một mảng chuỗi. sentence là danh sách các từ tạo thành một câu từ sách giáo khoa. Cột out là từ cuối cùng của sentence. Cột in được tạo bằng cách loại bỏ từ cuối cùng khỏi sentence.
model CountVectorizer yêu cầu một dataframe có cột words và sẽ tạo ra cột vec.
Bạn sẽ thực hiện phép biến đổi đầu tiên để thêm cột invec, có dạng như sau:
+----------------------+-------+------------------------------------+
|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
Sau đó bạn sẽ thực hiện phép biến đổi thứ hai, có dạng như sau:
+------------------------------------+----------------+
|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
Bài tập này là một phần của khóa học
Nhập môn Spark SQL bằng Python
Hướng dẫn bài tập
- Tạo một dataframe tên
resultbằng cách dùngmodelđểtransform()df.resultcó các cộtsentence,in,out, vàinvec.inveclà vector chuyển đổi từ cộtin. - Thêm một cột vào
resulttênoutvec. Lúc nàyresultcó các cộtsentence,in,out,invec, vàoutvec.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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)