【问题标题】:How to add custom stop word list to StopWordsRemover如何将自定义停用词列表添加到 StopWordsRemover
【发布时间】:2017-09-23 05:15:48
【问题描述】:

我在我的 pyspark 数据框上使用 pyspark.ml.feature.StopWordsRemover 类。它有 ID 和 Text 列。除了提供的默认停用词列表外,我还想添加自己的自定义列表以从字符串中删除所有数值。

我可以看到提供了一个方法来为这个类添加 setStopWords。我想我正在努力使用正确的语法来使用这种方法。

from pyspark.sql.functions import *
from pyspark.ml.feature import * 

a = StopWordsRemover(inputCol="words", outputCol="filtered")
b = a.transform(df)

上面的代码在过滤列中给了我预期的结果,但它只删除/停止标准单词。我正在寻找一种方法来添加我自己的自定义列表,该列表将包含我希望过滤的更多单词和数值。

【问题讨论】:

    标签: python pyspark spark-dataframe text-mining stop-words


    【解决方案1】:

    你可以用这个来指定它:

    stopwordList = ["word1","word2","word3"]
    
    StopWordsRemover(inputCol="words", outputCol="filtered" ,stopWords=stopwordList)
    

    小记:

    上述解决方案将原始停用词列表替换为我们提供的列表。
    如果您想在现有/预定义的停用词之外添加自己的停用词,那么我们需要在将原始列表作为参数传递给 StopWordsRemover() 之前将列表附加到原始列表中。我们转换为设置以删除任何重复项。

    stopwordList = ["word1","word2","word3"] stopwordList.extend(StopWordsRemover().getStopWords())
    stopwordList = list(set(stopwordList))#optionnal
    StopWordsRemover(inputCol="words", outputCol="filtered" ,stopWords=stopwordList)

    【讨论】:

    • 在如何将所有数值添加到 StopWrodList 中添加此注释:num_list=range(0,99999) stopwordList=map(str,num_list)
    • 我认为使用这样的列表并不明智,因为对于每个标记,它必须遍历列表的每个元素并将其与标记进行比较。我建议使用正则表达式,例如 ``` re.sub(r"/d+", "", text) ```。效率更高
    • 如果我没有一个很小的列表,而是一个带有自定义单词的巨大 txt,该怎么办?我遇到了麻烦,因为 txt 在 pyspark 中被读取为数据帧,而这个 ,stopWords= 参数不会采用数据帧:(
    猜你喜欢
    • 2020-06-30
    • 2021-10-24
    • 2021-01-02
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 2013-10-05
    • 2013-08-03
    • 2013-08-29
    相关资源
    最近更新 更多