PySpark下使用UDF配合自定义停用词表实现多语言文本停用词移除
实现代码
你可以直接按照以下步骤注册并调用UDF实现按语种过滤停用词:
- 首先导入UDF相关依赖:
from pyspark.sql.functions import udf, concat_ws from pyspark.sql.types import ArrayType, StringType
- 定义停用词过滤逻辑并注册UDF:
def remove_stopwords(lang, text): # 拆分文本为单词列表 word_list = text.split() # 读取对应语种的停用词表,转set提升查询效率 target_stopwords = set(stopwords.get(lang, [])) # 过滤停用词,统一转小写匹配避免大小写问题 return [word for word in word_list if word.lower() not in target_stopwords] # 注册UDF,指定返回值为字符串数组 remove_sw_udf = udf(remove_stopwords, ArrayType(StringType()))
- 调用UDF处理数据:
# 生成移除停用词后的结果列,filtered_text为单词数组,filtered_text_str为拼接后的字符串 sf_processed = sf.withColumn("filtered_text", remove_sw_udf("lang", "text")) \ .withColumn("filtered_text_str", concat_ws(" ", "filtered_text")) # 查看结果 sf_processed.show(truncate=False)
输出示例
运行后得到的结果如下:
+----+---------------------------------------------------------+-----------------------------------------------+---------------------------------------+ |lang|text |filtered_text |filtered_text_str | +----+---------------------------------------------------------+-----------------------------------------------+---------------------------------------+ |eng |I saw the red balloon |[I, saw, red, balloon] |I saw red balloon | |eng |She was drinking tea from a black mug |[She, drinking, tea, black, mug] |She drinking tea black mug | |ger |Er ging heute sehr weit |[ging, heute, weit] |ging heute weit | |ger |Ich habe dich seit hundert Jahren nicht mehr gesehen |[hundert, Jahren, gesehen] |hundert Jahren gesehen | +----+---------------------------------------------------------+-----------------------------------------------+---------------------------------------+
如果你不需要保留单词数组格式,只需要最终字符串的话,可以省略
filtered_text列的生成,直接一步拼接即可。
内容的提问来源于stack exchange,提问作者Rory
相关产品推荐
相关产品推荐

