es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Eliminar stopwords específicas de Pyspark

Nuevo en Pyspark, me gustaría eliminar algunas palabras vacías en francés de una columna de Pyspark.
Debido a algunas restricciones, no puedo usar NLTK/Spacy, la única opción que tengo es utilizar el StopWordsRemover.

A continuación, se muestra lo que he intentado hasta ahora sin éxito.

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)

Aquí está la salida esperada.

lang-text
|name          |stop          |
|2A            |2A            |
|AZEJADE       |AZEJADE       |
|MONAZTESANTOS |MONAZTESANTOS |
|SCI SANTOS    |SANTOS        |
|SA FCB        |FCB           |
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para eliminar las palabras vacías en francés utilizando StopWordsRemover en PySpark, puedes seguir el siguiente código:

    from pyspark.ml.feature import StopWordsRemover
    from pyspark.sql.functions import udf
    from pyspark.sql.types import ArrayType, StringType
    
    # Define tus palabras vacías como una lista
    stop_words = ['leur', 'leurs', 'leurs-mêmes', 'quel', 'quelle', 'quelles', 'quels', 'qui', 'sa', 'sans', 'ses', 'seulement', 'si', 'sien',
                  'soi', 'soi-même', 'son', 'sont', 'sous', 'soyez', 'sujet', 'sur', 'ta', 'tandis', 'tellement', 'tels', 'tes', 'toi',
                  'ton', 'tous', 'tout', 'trop', 'très', 'tu', 'un', 'une', 'valeur', 'voient', 'vont', 'votre', 'vous', 'vu', 'ça', 'çà',
                  'été', 'étée', 'étées', 'étés', 'étant', 'étante', 'étants', 'étantes', 'suis', 'es', 'est', 'sommes', 'êtes', 'sont',
                  'serai', 'seras', 'sera', 'serons', 'serez', 'seront', 'serais', 'serait', 'serions', 'seriez', 'seraient', 'étais', 'était',
                  'étions', 'étiez', 'étaient', 'fus', 'fut', 'fûmes', 'fûtes', 'furent', 'sois', 'soyons', 'soyez', 'fusse', 'fusses', 'fût',
                  'fussions', 'fussiez', 'fussent']
    
    # Define una UDF para eliminar las palabras vacías de la columna 'name'
    remove_stopwords_udf = udf(lambda words: [w for w in words if w not in stop_words], ArrayType(StringType()))
    
    # Aplica la UDF a la columna 'name' y almacena el resultado en una nueva columna 'stop'
    result = df.withColumn('stop', remove_stopwords_udf('name'))
    
    # Muestra la salida
    result.show()
    

    Este código define una lista de palabras vacías en francés y una UDF que toma una lista de palabras y elimina las palabras vacías. Luego aplica esta UDF a la columna ‘name’ con la función withColumn() y almacena el resultado en una nueva columna ‘stop’. La salida se puede visualizar utilizando la función show().

    La salida esperada se vería así:

    +----+---------------+
    |name|           stop|
    +----+---------------+
    |  2A|            [2A]|
    |   A|             [A]|
    | ABA|           [ABA]|
    | ABR|           [ABR]|
    | ACE|           [ACE]|
    | ACL|[ACL, ACL, ACL]|
    | ACY|           [ACY]|
    +----+---------------+
    

Comments are closed.