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

BigQuery数据清洗:如何统一字段字体解决同值异字识别问题

BigQuery同语义异字体字段归一化清洗方法

这类花体、粗体、哥特体等特殊样式的字符本质是Unicode里分配在数学字母数字符号、字母式符号区段的装饰性变体,每个变体和对应常规拉丁字符语义完全一致,但因为编码值不同,BigQuery默认会判定为不同值,可通过以下方法完成统一清洗:

方法1:原生SQL自动归一化(优先推荐,无额外依赖)

直接用BigQuery内置的Unicode归一化函数搭配正则过滤即可实现,核心逻辑是通过兼容性分解把装饰字符拆成基础字符+格式标记,再剔除无用的格式标记,代码示例:

-- 字段清洗示例
WITH test_data AS (
  SELECT 'ℂ𝕒𝕣𝕥𝕒𝕘𝕖𝕟𝕒' AS city_name UNION ALL
  SELECT 'Cartagena' AS city_name UNION ALL
  SELECT '𝐂𝐚𝐫𝐭𝐚𝐠𝐞𝐧𝐚' AS city_name -- 另一种粗体装饰字
)
SELECT
  city_name AS original_val,
  REGEXP_REPLACE(
    NORMALIZE(city_name, NFKD),
    r'[^\p{Latin}\p{Number}\p{P}\s]',
    ''
  ) AS normalized_val
FROM test_data

参数说明:

  • NORMALIZE(字段, NFKD):使用Unicode NFKD兼容性分解模式,会自动把所有带字体装饰的变体字符拆解为对应的常规基础字符+字体格式标记,比如花体𝕒会被拆解为常规字符a+花体格式标记
  • 后续正则替换会剔除拆解后残留的格式标记,仅保留拉丁字母、数字、标点、空格,最终得到统一的常规格式文本

注意:该方案不会修改字符本身的语义,仅剥离字体装饰属性,带重音的非英语拉丁字符(如西语ñ、法语é)都会被完整保留,不会出现清洗后语义丢失的问题。

方法2:映射表兜底(适配稀有特殊字体场景)

如果存在极个别未纳入Unicode兼容性映射的稀有装饰字体,可先扫描全表提取特殊字符生成映射表做兜底:

  • 第一步:扫描全表提取所有超出基础ASCII范围的特殊字符,统计出现频次
SELECT DISTINCT
  CHAR(code_point) AS special_char,
  COUNT(1) AS appear_times
FROM `你的目标表`,
UNNEST(TO_CODE_POINTS(待清洗字段)) AS code_point
WHERE code_point > 127
GROUP BY 1
ORDER BY 2 DESC
  • 第二步:对提取出的装饰字符手动匹配对应的常规字符,生成固定映射关系,清洗时先用方法1做自动归一化,剩余未匹配的特殊字符通过TRANSLATE函数批量替换即可。

效果校验

清洗完成后可通过分组统计验证结果,原本被识别为多个不同值的同语义文本会被合并为同一分组,统计结果不再出现拆分误差。

内容的提问来源于stack exchange,提问作者IngButters

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:03:20