过滤 PySpark 中的任何非字母数字

use*_*036 3 regex contains pyspark spacy

使用 Pyspark 和 spacy 包并拥有一个带有标记的数据集,我试图过滤掉具有包含符号或非字母数字字符的标记的任何行。

the
house
#
was
in
the)
400s
w-ow
$crazy
Run Code Online (Sandbox Code Playgroud)

应该只返回

the
house
was
in
400s
Run Code Online (Sandbox Code Playgroud)

我尝试使用类似的东西 F.regexp_extract(F.col('TOKEN'), '[^[A-Za-z0-9] ]', 0),但我想搜索整个标记而不仅仅是索引 0。我考虑过使用 contains() 语句,但这似乎我必须做大量不同的 or 语句来捕获我想要的所有不同符号排除

kit*_*tes 6

看一下这个。您可以使用rlikefunction 并negation(~)在过滤器中使用。

   from pyspark.sql import functions as F

    #INPUT DF
    +------+
    |  text|
    +------+
    |   the|
    | house|
    |     #|
    |   was|
    |    in|
    |  the)|
    |  400s|
    |  w-ow|
    |$crazy|
    +------+

    df.filter(~F.col("text").rlike("[^0-9A-Za-z]")).show()

    #OUTPUT DF
    # +-----+
    # | text|
    # +-----+
    # |  the|
    # |house|
    # |  was|
    # |   in|
    # | 400s|
    # +-----+
Run Code Online (Sandbox Code Playgroud)