Преобразование текста в векторный формат
Вы узнали, как разбивать предложения на слова и преобразовывать массив слов в числовой вектор с помощью 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
Это упражнение является частью курса
Введение в Spark SQL на Python
Инструкции к упражнению
- Создайте датафрейм
result, применивmodelдля вызоваtransform()наdf. Датафрейм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)