删除特定的停用词 Pyspark

Remove specific stopwords Pyspark

Pyspark 新手,我想从 pyspark 列中删除一些法语停用词。 由于某些限制,我不能使用 NLTK/Spacy,StopWordsRemover 是我唯一的选择。

以下是我目前尝试过但没有成功的方法

from pyspark.ml import *
from pyspark.ml.feature import *

stop = ['EARL ', 'EIRL ', 'EURL ', 'SARL ', 'SA ', 'SAS ', 'SASU ', 'SCI ', 'SCM ', 'SCP ']
stop = [l.lower() for l in stop]
    
model = Pipeline(stages = [
        Tokenizer(inputCol = "name", outputCol="token"), 
        StopWordsRemover(inputCol="token", outputCol="stop", stopWords = stop),]).fit(df)
    
  result = model.transform(df)

这是预期的输出

|name          |stop          |
|2A            |2A            |
|AZEJADE       |AZEJADE       |
|MONAZTESANTOS |MONAZTESANTOS |
|SCI SANTOS    |SANTOS        |
|SA FCB        |FCB           |

问题是您的停用词中有尾随空格。此外,您不需要将它们小写,除非您需要 StopWordsRemover 区分大小写。默认情况下它设置为 false,您可以使用参数 caseSensitive.

更改它

请注意,当您使用 Tokenizer 时,输出将为小写。如果您需要与输入列 name 大小写相同的输出,那么最好用空格 splitname

试试这个:

from pyspark.ml.feature import StopWordsRemover
import pyspark.sql.functions as F

stop = ['EARL', 'EIRL', 'EURL', 'SARL', 'SA', 'SAS', 'SASU', 'SCI', 'SCM', 'SCP']
df = spark.createDataFrame([("2A",), ("AZEJADE",), ("MONAZTESANTOS",), ("SCI SANTOS",), ("SA FCB",)], ["name"])

df = df.withColumn("tokens", F.split("name", "\s+"))
remover = StopWordsRemover(stopWords=stop, inputCol="tokens", outputCol="stop")

result = remover.transform(df).select("name", F.array_join("stop", " ").alias("stop"))

result.show()
#+-------------+-------------+
#|         name|         stop|
#+-------------+-------------+
#|           2A|           2A|
#|      AZEJADE|      AZEJADE|
#|MONAZTESANTOS|MONAZTESANTOS|
#|   SCI SANTOS|       SANTOS|
#|       SA FCB|          FCB|
#+-------------+-------------+