【问题标题】:How to remove special characters,unicode emojis in pyspark?如何删除pyspark中的特殊字符,unicode emojis?
【发布时间】:2021-12-19 22:00:54
【问题描述】:

大家下午好,我在清除数据框的字符串列中的特殊字符时遇到问题,我只想删除html组件,表情符号和unicode错误等特殊字符,例如\u2013

有人有正则表达式来帮助我吗? 或者对如何处理这个问题有什么建议?

输入:

i want to remove ???? and codes "\u2022"

预期输出:

i want to remove and codes

我试过了:

re.sub('[^A-Za-z0-9 \u2022]+', '', nome)

regexp_replace('nome', '\r\n|/[\x00-\x1F\x7F]/u', ' ')

df = df.withColumn( “价值_2”, F.regexp_replace(F.regexp_replace("值", "[^\x00-\x7F]+", ""), '""', '') )

df = df.withColumn("new",df.text.encode('ascii', errors='ignore').decode('ascii'))

尝试了一些解决方案,但没有人识别字符“\u2013”​​,有人遇到过这种情况吗?

【问题讨论】:

  • 一个简单的方法是简单地编码然后将你的字符串解码为 ascii 'i want to remove ☺ and codes "\u2022"'.encode('ascii', errors='ignore').decode('ascii'),现在你只需要处理双空格或双 "" 如果你有它们,但是那是另一个简单的字符串替换

标签: python apache-spark pyspark apache-spark-sql


【解决方案1】:

您可以使用 regex 使用 regexp_replace 函数从列中删除所有 unicode 字符。然后删除可以保留的多余双引号:

import pyspark.sql.functions as F

df = spark.createDataFrame([('i want to remove ? and codes "\u2022"',)], ["value"])

df = df.withColumn(
    "value_2",
    F.regexp_replace(F.regexp_replace("value", "[^\x00-\x7F]+", ""), '""', '')
)

df.show(truncate=False)

#+---------------------------------+----------------------------+
#|value                            |value_2                     |
#+---------------------------------+----------------------------+
#|i want to remove ? and codes "•"|i want to remove  and codes |
#+---------------------------------+----------------------------+

【讨论】:

    【解决方案2】:
    import re
    L=re.findall(r"[^?•]+", "abdasfrasdfadfs?adfaa?•sdf•adsfasfasfasf")
    print(L) # prints ['abdasfrasdfadfs', 'adfaa', 'sdf', 'adsfasfasfasf']
    

    所以要删除笑脸和子弹表情符号(\u2022), 您应用上面的模式,调用 findall 方法,然后加入返回的列表。 如下:

    import re
    given_string = "?Your input• string ?"
    result_string = "".join(re.findall(r"[^?•]+", given_string))
    print(result_string) #prints 'Your input string '
    

    如果您知道 emoji 的 unicode 编号,您可以将 emoji 替换为 unicode 编号,如下所示:

    result_string = "".join(re.findall(r"[^?\u2022]+", given_string))
    

    【讨论】:

    • 我设法解决了这个问题: result_string = re.sub('"\\\\u2022\\"'," ",given_string ) 感谢大家提出的解决方案。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多