You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark按纯字母字符分组聚合脏字符串列并排除相似词的实现方案咨询

PySpark按纯字母字符分组聚合脏字符串列并排除相似词的实现方案咨询

嘿,这个需求我刚好处理过类似场景,给你几个实用的思路,核心是精准提取单词中的纯字母核心部分,同时保留不同字母组合的独立性,这样就能既合并前后带非字母的同词根变体,又不会误合并dates、dating这类不同的词:

方法一:正则提取核心纯字母单词(推荐)

利用PySpark的regexp_extract函数,精准捕获单词前后非字母字符包裹的纯字母序列,这样既能清理掉_date、!date、date,这类脏数据,又能让dates、dating这类不同字母组合的单词保持独立。

具体步骤如下:

  1. 导入PySpark函数库:
from pyspark.sql import functions as F
  1. 清洗word列,提取核心纯字母单词:
# 正则逻辑:匹配开头非字母→捕获连续字母序列→匹配结尾非字母
cleaned_df = dirty_df.withColumn(
    "clean_word",
    F.regexp_extract(F.col("word"), "^[^a-zA-Z]*([a-zA-Z]+)[^a-zA-Z]*$", 1)
)
  1. 按清洗后的单词分组聚合求和,再调整列名:
result_df = cleaned_df.filter(F.col("clean_word") != "")  # 过滤全非字母的无效单词
.groupBy("clean_word")
.agg(F.sum("count").alias("count"))
.select("count", F.col("clean_word").alias("word"))
  1. 查看结果:
result_df.show()

这样处理后,date的所有前后带非字母的变体都会被合并成date,总和就是32375+359+306+213=33253;snap的变体总和是209+204+107+12=532,完全符合你的目标,同时dates、dating这类单词会被保留为独立条目,不会被误合并。

补充说明

如果你的脏数据存在中间带非字母的情况(比如da!te),而你希望这类也合并为date,可以把正则调整为F.regexp_replace(F.col("word"), "[^a-zA-Z]", ""),直接移除所有非字母字符,但这种场景要根据你的实际数据情况来选择,毕竟你的需求明确要排除相似字母组合的单词,第一种方法的精准度更高。

备注:内容来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 14:24:31