在scala中删除标点符号和ascii字符

a64a0gku  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(900)

我有一个数据集,我在那里阅读一些推文,我必须删除标点符号和非ascii字符,并转换成小字母的文本。如何在Dataframe中实现这一点?有没有一种方法可以使用sparksql。

  1. scala> data.show
  2. +-----+--------------------+
  3. | id| tweet|
  4. +-----+--------------------+
  5. |31963|#studiolife #aisl...|
  6. |31964| @user #white #su...|
  7. |31965|safe ways to heal...|
  8. |31966|is the hp and the...|
  9. |31967| 3rd #bihday to ...|
  10. |31968|choose to be :)...|
  11. |31969|something inside ...|
  12. |31970|#finished#tattoo#...|
  13. |31971| @user @user @use...|
8mmmxcuj

8mmmxcuj1#

更通用的方法-替换 non-word 字符除外 space 如下所示-

  1. val df = Seq("#studiolife #aisl", "@user #white #su", "oh! yeah #123 #su.").toDF("tweet")
  2. df.withColumn("clean_tweet", regexp_replace($"tweet", "[\\W&&[^\\s+]]", ""))
  3. .show(false)
  4. /**
  5. * +------------------+---------------+
  6. * |tweet |clean_tweet |
  7. * +------------------+---------------+
  8. * |#studiolife #aisl |studiolife aisl|
  9. * |@user #white #su |user white su |
  10. * |oh! yeah #123 #su.|oh yeah 123 su |
  11. * +------------------+---------------+
  12. */
zyfwsgd6

zyfwsgd62#

对于df列,请尝试以下操作:用单个字符替换字符串列:

  1. import org.apache.spark.sql.functions._
  2. regexp_replace(df.col, "[\\?,\\.,\\$]", "."))
  3. ...
  4. val res = df.withColumn("some_col_cleaned", regexp_replace(df("some_col"), "[\\_,\\*,\\$,\\#,\\@]", ""))
  5. ...

列的字符串类型为:

  1. val res = df.withColumn("cleansed", regexp_replace(df("tweet"), "[\\_,\\*,\\$,\\#,\\@,\\&]", ""))

工作正常

相关问题