匹配停用词组并替换为 Pyspark 中的空格

Posted

技术标签:

【中文标题】匹配停用词组并替换为 Pyspark 中的空格【英文标题】:match with group of stop words and replace with empty space in Pyspark 【发布时间】:2020-12-16 01:20:04 【问题描述】:

我在表格中有地址列,如下所示

 >>> spark.sql("select add1 from test").show(10,False)
+---------------------------+
|add1                       |
+---------------------------+
|PO BOX 1111DUBAI  UAE      |
|P.O. BOX 2222DUBAI - U.A.E|
+---------------------------+

我必须匹配一组单词并将它们从列中删除以用于比较目的

我能够用空格替换单个单词,如下所示(在本例中为“UAE”)

spark.sql("select regexp_replace(add1,'UAE','') from test").show(10,False)
+---------------------------+
|regexp_replace(add1, UAE, )|
+---------------------------+
|PO BOX 1111DUBAI           |
|P.O. BOX 2222DUBAI - U.A.E|
+---------------------------+

但我想删除所有特殊字符和一组停用词,例如 'UAE','U.A.E', 'U A E', 'PO', 'PO'

期望的输出:

spark.sql("select regexp_replace(add1,'UAE','') from test").show(10,False)
+---------------------------+
|regexp_replace(add1, UAE, )|
+---------------------------+
|1111DUBAI                  |
|2222DUBAI                  |
+---------------------------+

有人可以帮我实现这个吗,谢谢!

【问题讨论】:

你不认为“保留”某种模式而不是删除其他所有模式会更好吗? 我也同意@Steven。为什么不尝试使用regexp_extract 获取所需的? 并非所有地址都有邮政信箱号码,它们有街道名称,我们可以接受,只有那些有邮政信箱号码的地址必须更正。 【参考方案1】:

您可以这样做。希望它能解决你所有的情况。

from pyspark.sql import functions as F

stop_words = 'UAE','U.A.E', 'U A E', 'PO', 'P O', 'BOX'

df2 = df.withColumn(
    "add1",
    F.regexp_replace(F.col("add1"), r"[^a-zA-Z0-9\s]", "")
)

for stop_word in stop_words: 
    df2 = df2.withColumn(
        "add1",
        F.trim(F.regexp_replace(F.col("add1"), stop_word, ""))
    )

df2.show()

+---------+
|     add1|
+---------+
|1111DUBAI|
|2222DUBAI|
+---------+

【讨论】:

以上是关于匹配停用词组并替换为 Pyspark 中的空格的主要内容,如果未能解决你的问题,请参考以下文章

忽略查询中的mysql全文停用词

Bigram 在 weka 中包含停用词?

Java 中的分词器、停用词删除、词干提取

python怎么去除停用词的

使用COM接口停用CanOe中的热点

NSLayoutConstraint 激活/停用