在PySpark中使用正则表达式创建NGram

2024-09-29 19:22:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pyspark dataframe列,其名称为:

|   name     |
--------------
|Lebron James|
|Kyrie Irving|
|Kevin Durant|

我想创建一个新列,如下所示:

|   name     |         trigram          |
-----------------------------------------
|Lebron James| Leb ebr bro on  Jam ame es
|Kyrie Irving| ...
|Kevin Durant| ...

到目前为止我有

df.withColumn("trigram", regex_replace(col("name"), "([A-Za-z0-9\s]{3})(?!$)", r"$1 "))

但这会产生:

|   name     |         trigram       |
--------------------------------------
|Lebron James| Leb ron Ja  mes
|Kyrie Irving| Kyr ie  Irv ing
|Kevin Durant| Kev in  Dur ant

注意:重要的是不要使用UDF。我可以简单地使用udf和列表理解来做我想做的事情,但我希望以最理想的方式来做,因为实际数据有数亿行


Tags: name名称dataframeontrigrampysparkbrokevin
1条回答
网友
1楼 · 发布于 2024-09-29 19:22:07

你可以用

regex_replace(col("name"), "(?=(.{3})).", r"$1 ")

regex demo。详情:

  • (?=(.{3}))-一个正向的前瞻,它捕获(到组1,$1)当前位置右侧除换行符以外的三个字符
  • .-除换行字符外的任何字符,已消耗(将被删除,并由从该字符开始的3字符条纹替换)

相关问题 更多 >

    热门问题