删除特定的停用词 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
大小写相同的输出,那么最好用空格 split 列 name
。
试试这个:
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|
#+-------------+-------------+
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
大小写相同的输出,那么最好用空格 split 列 name
。
试试这个:
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|
#+-------------+-------------+