#!/usr/bin/env python3
"""
韩译后处理脚本：按客户修正记录自动替换错误用词
用法: python3 translate_replace.py <ko_json路径>
示例: python3 translate_replace.py /data/news/json/ko-0714data.json

修正来源: 实习生朴泰泳反馈的2026-07-13韩文修正意见
"""

import json, sys, re

def apply_replacements(text):
    """对单个字符串应用所有替换规则"""
    if not text:
        return text
    
    # 按优先级从高到低执行替换（长匹配优先，避免短词误伤）
    # 注意：部分替换使用正则避免重复匹配（re.sub方式）
    replacements = [
        # 品牌板块
        ('선케어 브랜드', '선크림 브랜드'),
        
        # 车型板块 - 交付相关（2026-07-21 新增：인도→지급/납품）
        ('1차 인도 시작', '1차 납품 시작'),
        ('인도 시작 예정', '납품 시작 예정'),
        ('전국 인도를 시작', '전국 지급을 시작'),
        ('전국 인도 공식 시작', '전국 공식 지급 시작'),
        ('누적 인도', '누적 지급'),
        ('인도', '지급'),
        
        # 车型板块 - 申报图 -> 官方图片
        (' 신고 이미지 ', ' 오피셜 이미지 '),
        ('신고 이미지 공개', '오피셜 이미지 공개'),
        ('신고 이미지', '오피셜 이미지'),
        
        # 社会板块 - 车龄 -> 年份
        ('평균 차령', '평균 연식'),
        
        # 社会板块 - 人名/作品名修正（2026-07-21 新增）
        ('Joey Wong', 'Wangzuxian(王祖贤)'),
        ('joey Wong', 'Wangzuxian(王祖贤)'),
        ('NetEase', '왕이(网易)'),
        ("'Tianxia'", "'(天下)'"),
        ('Tianxia', '天下'),
        ("'qingying'", "'(倩影)'"),
        ('qingying', '倩影'),
        
        # 现代板块 - 媒体名称保留中文（2026-07-21 新增）
        ('NetEase\\n   자동차', '网易\\n자동차'),
        ('NetEase', '网易'),
        
        # 现代板块 - 语法修正（2026-07-21 新增）
        ('좋는', '쫓는'),
        ('구축하는 것 인가', '구축하는 것인가, 아니면 생태계를 구축하는 것인가'),
        
        # 车型板块 - 品牌名加中文标注（2026-07-21 新增）
        ('Buick Zhijing', 'Buick(别克) ZhiJing(至境)'),
        ('Buick(别克) Zhijing', 'Buick(别克) ZhiJing(至境)'),  # 防止重复替换
        ('Yijing X9', 'Yijing(奕境) X9'),
        ('chengdu 모터쇼', 'chengdu(成都) 모터쇼'),
        
        # 现代板块 - 限时优惠
        ('EO Yio 한시적 혜택', 'Eo Yio 한정 할인'),
        ('한시적 혜택', '한정 할인'),
        ('한시적 저금리 금융 보조금 제공', '저금리 금융 보조금 한정 제공'),
        ('한시적 저금리', '저금리 한정'),
    ]
    
    for old, new in replacements:
        if old in text:
            text = text.replace(old, new)
    
    # 正则替换：仅当后续无中文标注时才替换人名（防止重复）
    import re
    # 人名
    text = re.sub(r'Zhang Jingyi(?!\s*\(张婧仪\))', 'ZZJY_MARKER_ZZ', text)
    text = re.sub(r'Zhang Kangle(?!\s*\(张康乐\))', 'ZZKL_MARKER_ZZ', text)
    text = text.replace('ZZJY_MARKER_ZZ', 'Zhang Jingyi(张婧仪)')
    text = text.replace('ZZKL_MARKER_ZZ', 'Zhang Kangle(张康乐)')
    
    # 车型品牌名（仅当无中文标注时替换）
    text = re.sub(r'Trumpchi(?!\s*\(传祺\))', 'TCMARKER_ZZ', text)
    text = re.sub(r'Mercedes-Maybach(?!\s*\(梅赛德斯-迈巴赫\))', 'MMMARKER_ZZ', text)
    text = re.sub(r'Lamborghini(?!\s*\(兰博基尼\))', 'LBMARKER_ZZ', text)
    text = re.sub(r'Geely(?!\s*\(吉利\))', 'GLMARKER_ZZ', text)
    text = text.replace('TCMARKER_ZZ', 'Trumpchi(传祺)')
    text = text.replace('MMMARKER_ZZ', 'Mercedes-Maybach(梅赛德斯-迈巴赫)')
    text = text.replace('LBMARKER_ZZ', 'Lamborghini(兰博基尼)')
    text = text.replace('GLMARKER_ZZ', 'Geely(吉利)')
    # 现代品牌名（仅当无中文标注时替换）
    text = re.sub(r'제네시스(?!\s*\(捷尼赛思\))', 'GENSIS_MARKER', text)
    text = text.replace('GENSIS_MARKER', 'Genesis(捷尼赛思)')
    
    # ==================== 2026-07-25 新增：韩文→英文(中文)品牌格式转换 ====================
    # 车型品牌：Dify常输出韩文(英文)格式如 란투(VOYAH)，需转为英文(中文)格式
    text = re.sub(r'CATL(?!\s*\(宁德时代\))', 'CATL_MARKER', text)
    text = text.replace('CATL_MARKER', 'CATL(宁德时代)')
    
    text = re.sub(r'지커\(ZEEKR\)', 'ZEEKR(极氪)', text)
    text = re.sub(r'란투\(VOYAH\)', 'VOYAH(岚图)', text)
    text = re.sub(r'아바타\(AVATR\)', 'AVATR(阿维塔)', text)
    text = re.sub(r'딥블루\(Deepal\)', 'Deepal(深蓝)', text)
    text = re.sub(r'니오\(NIO\)', 'NIO(蔚来)', text)
    text = re.sub(r'리오토\(Li Auto\)', 'Lixiang(理想)', text)
    text = re.sub(r'샤오미\(Xiaomi\)', 'Xiaomi(小米)', text)
    
    # 英文品牌名加中文标注（仅当无中文标注时）
    text = re.sub(r'(?<!\(宝马\))BMW(?!\s*\(宝马\))', 'BMW_MARKER', text)
    text = text.replace('BMW_MARKER', 'BMW(宝马)')
    text = re.sub(r'(?<!\(小米\))Xiaomi(?!\s*\(小米\))', 'XM_MARKER', text)
    text = text.replace('XM_MARKER', 'Xiaomi(小米)')
    text = re.sub(r'(?<!\(奔驰\))Mercedes-Benz(?!\s*\(奔驰\))', 'MB_MARKER', text)
    text = text.replace('MB_MARKER', 'Mercedes-Benz(奔驰)')
    text = re.sub(r'(?<!\(比亚迪\))BYD(?!\s*\(比亚迪\))', 'BYD_MARKER', text)
    text = text.replace('BYD_MARKER', 'BYD(比亚迪)')
    
    # 2026-07-28 新增品牌
    text = re.sub(r'(?<!\(极氪\))ZEEKR(?!\s*\(极氪\))', 'ZK_MARKER', text)
    text = text.replace('ZK_MARKER', 'ZEEKR(极氪)')
    text = re.sub(r'(?<!\(智界\))Luxeed(?!\s*\(智界\))', 'LX_MARKER', text)
    text = text.replace('LX_MARKER', 'Luxeed(智界)')
    text = re.sub(r'(?<!\(享界\))Stelato(?!\s*\(享界\))', 'ST_MARKER', text)
    text = text.replace('ST_MARKER', 'Stelato(享界)')
    text = re.sub(r'(?<!\(腾势\))DENZA(?!\s*\(腾势\))', 'DZ_MARKER', text)
    text = text.replace('DZ_MARKER', 'DENZA(腾势)')
    text = re.sub(r'(?<!\(卡骆驰\))CROCS(?!\s*\(卡骆驰\))', 'CR_MARKER', text)
    text = text.replace('CR_MARKER', 'CROCS(卡骆驰)')
    
    # 2026-07-30 新增品牌/车型/地名
    text = re.sub(r'(?<!\(景德镇\))Jingdezhen(?!\s*\(景德镇\))', 'JDZ_MARKER', text)
    text = text.replace('JDZ_MARKER', 'Jingdezhen(景德镇)')
    text = re.sub(r'(?<!\(长安\))Changan(?!\s*\(长安\))', 'CA_MARKER', text)
    text = text.replace('CA_MARKER', 'Changan(长安)')
    text = re.sub(r'(?<!\(尊界\))Zunjie(?!\s*\(尊界\))', 'ZJ_MARKER', text)
    text = text.replace('ZJ_MARKER', 'Zunjie(尊界)')
    text = re.sub(r'(?<!\(红旗\))Hongqi(?!\s*\(红旗\))', 'HQ_MARKER', text)
    text = text.replace('HQ_MARKER', 'Hongqi(红旗)')
    text = re.sub(r'(?<!\(大汉\))Da Han(?!\s*\(大汉\))', 'DH_MARKER', text)
    text = text.replace('DH_MARKER', 'Da Han(大汉)')
    
    # 通用品牌补全
    text = re.sub(r'Buick(?!\s*\(别克\))', 'BK_MARKER', text)
    text = text.replace('BK_MARKER', 'Buick(别克)')
    
    # ==================== 2026-07-31 新增：品牌/车型标注补全 ====================
    # 아이토(AITO) → AITO(问界)（韩文(英文)格式转换）
    text = re.sub(r'아이토\(AITO\)', 'AITO(问界)', text)
    text = re.sub(r'(?<!\(问界\))AITO(?!\s*\(问界\))', 'AITO_MARKER', text)
    text = text.replace('AITO_MARKER', 'AITO(问界)')
    # SF Express → SF Express(顺丰)
    text = re.sub(r'(?<!\(顺丰\))SF Express(?!\s*\(顺丰\))', 'SFE_MARKER', text)
    text = text.replace('SFE_MARKER', 'SF Express(顺丰)')
    # Hello Kitty → Hello Kitty(凯蒂猫)
    text = re.sub(r'(?<!\(凯蒂猫\))Hello Kitty(?!\s*\(凯蒂猫\))', 'HK_MARKER', text)
    text = text.replace('HK_MARKER', 'Hello Kitty(凯蒂猫)')
    # 2026-08-11 新增：车型品牌/公司名标注补全
    # Mitsubishi → Mitsubishi(三菱)（英文品牌名加中文标注，仅当无中文标注时）
    text = re.sub(r'(?<!\(三菱\))Mitsubishi(?!\s*\(三菱\))', 'MSB_MARKER', text)
    text = text.replace('MSB_MARKER', 'Mitsubishi(三菱)')
    # Xingji → Xingji(星际)（星际L皮卡系列）
    text = re.sub(r'(?<!\(星际\))Xingji(?!\s*\(星际\))', 'XJ_MARKER', text)
    text = text.replace('XJ_MARKER', 'Xingji(星际)')
    # Foxconn → Foxconn(富士康)
    text = re.sub(r'(?<!\(富士康\))Foxconn(?!\s*\(富士康\))', 'FXC_MARKER', text)
    text = text.replace('FXC_MARKER', 'Foxconn(富士康)')
    # Pininfarina → Pininfarina(宾尼法利纳)
    text = re.sub(r'(?<!\(宾尼法利纳\))Pininfarina(?!\s*\(宾尼法利纳\))', 'PNF_MARKER', text)
    text = text.replace('PNF_MARKER', 'Pininfarina(宾尼法利纳)')
    
    # ==================== 2026-07-30 新增：现代板块人名 ====================
    text = re.sub(r'(?<!\(郑义宣\))Chung Eui-sun(?!\s*\(郑义宣\))', 'CES_MARKER', text)
    text = text.replace('CES_MARKER', 'Chung Eui-sun(郑义宣)')
    text = re.sub(r'(?<!\(权正贤\))Kwon Jung-hyun(?!\s*\(权正贤\))', 'KJH_MARKER', text)
    text = text.replace('KJH_MARKER', 'Kwon Jung-hyun(权正贤)')
    
    # 媒体平台名 → 中文标注
    text = re.sub(r'Xiaohongshu(?!\s*\(小红书\))', 'XHS_MARKER', text)
    text = text.replace('XHS_MARKER', 'Xiaohongshu(小红书)')
    
    # ==================== 2026-07-29 新增：媒体名反翻译（Dify常把中文媒体名翻译成英文）====================
    text = re.sub(r'Today Hot Ranking', '今日热榜', text)
    text = re.sub(r'Sina Finance', '新浪财经', text)
    text = re.sub(r'Gasgoo(?!\s*\(盖世汽车\))', '盖世汽车', text)
    text = re.sub(r'Xcar(?!\s*\(爱咖号\))', '爱咖号', text)
    text = re.sub(r'Autohome(?!\s*\(汽车之家\))', '汽车之家', text)
    
    # ==================== 2026-07-28 新增：地名 → 英文(中文) ====================
    text = re.sub(r'(?<!\(成都\))Chengdu(?!\s*\(成都\))', 'CD_MARKER', text)
    text = text.replace('CD_MARKER', 'Chengdu(成都)')
    text = re.sub(r'(?<!\(上海\))Shanghai(?!\s*\(上海\))', 'SH_MARKER', text)
    text = text.replace('SH_MARKER', 'Shanghai(上海)')
    text = re.sub(r'(?<!\(北京\))Beijing(?!\s*\(北京\))', 'BJ_MARKER', text)
    text = text.replace('BJ_MARKER', 'Beijing(北京)')
    text = re.sub(r'(?<!\(合肥\))Hefei(?!\s*\(合肥\))', 'HF_MARKER', text)
    text = text.replace('HF_MARKER', 'Hefei(合肥)')
    text = re.sub(r'(?<!\(苏州\))Suzhou(?!\s*\(苏州\))', 'SZ_MARKER', text)
    text = text.replace('SZ_MARKER', 'Suzhou(苏州)')
    text = re.sub(r'(?<!\(深圳\))Shenzhen(?!\s*\(深圳\))', 'SZS_MARKER', text)
    text = text.replace('SZS_MARKER', 'Shenzhen(深圳)')
    text = re.sub(r'(?<!\(杭州\))Hangzhou(?!\s*\(杭州\))', 'HZ_MARKER', text)
    text = text.replace('HZ_MARKER', 'Hangzhou(杭州)')

    # ==================== 2026-07-31 新增：品牌/车型标注补全（须在地名规则之后执行，避免 Beijing 双重标注）====================
    # Beijing Hyundai → Beijing Hyundai(北京现代)，四种形态幂等处理：
    # 0. 混合双重标注还原：Beijing Hyundai(现代)(北京现代) → Beijing Hyundai(北京现代)
    text = re.sub(r'Beijing Hyundai\(现代\)\(北京现代\)', 'Beijing Hyundai(北京现代)', text)
    # 1. 双重标注还原：Beijing(北京) Hyundai(北京现代) → Beijing Hyundai(北京现代)
    text = re.sub(r'Beijing\(北京\) Hyundai\(北京现代\)', 'Beijing Hyundai(北京现代)', text)
    # 2. 单重标注还原：Beijing(北京) Hyundai → Beijing Hyundai(北京现代)
    text = re.sub(r'Beijing\(北京\) Hyundai', 'Beijing Hyundai(北京现代)', text)
    # 3. 未标注：Beijing Hyundai → Beijing Hyundai(北京现代)
    text = re.sub(r'(?<!\(北京现代\))Beijing Hyundai(?!\s*\(北京现代\))', 'BJHY_MARKER', text)
    text = text.replace('BJHY_MARKER', 'Beijing Hyundai(北京现代)')
    # 4. 重复标注清理：Beijing Hyundai(北京现代)(北京现代) → Beijing Hyundai(北京现代)
    text = re.sub(r'Beijing Hyundai\(北京现代\)\(北京现代\)', 'Beijing Hyundai(北京现代)', text)

    # Momenta R7 多重嵌套清理（2026-08-10 新增：处理 Dify 输出 Momenta R7(Momenta R7智驾方案)智驾方案) 死循环）
    text = re.sub(r'Momenta R7\([^)]*智驾方案\)[^)]*\)', 'Momenta R7(Momenta R7智驾方案)', text)
    text = re.sub(r'Momenta R7\(Momenta R7\(Momenta R7[^)]*\)智驾方案\)', 'Momenta R7(Momenta R7智驾方案)', text)
    # 现代车系英文名 → 英文(中文)（北京现代促销常见车型）
    text = re.sub(r'(?<!\(途胜\))Tucson(?!\s*\(途胜\))', 'TUC_MARKER', text)
    text = text.replace('TUC_MARKER', 'Tucson(途胜)')
    # 투싼 (Tucson(途胜)) 三层混排 → Tucson(途胜)（Dify 韩文(英文(中文)) 格式修复，2026-08-14）
    text = re.sub(r'투싼 \(Tucson\(途胜\)\)', 'Tucson(途胜)', text)
    text = re.sub(r'투싼\(Tucson\(途胜\)\)', 'Tucson(途胜)', text)
    text = re.sub(r'(?<!\(库斯途\))Staria(?!\s*\(库斯途\))', 'CUS_MARKER', text)
    text = text.replace('CUS_MARKER', 'Custo(库斯途)')
    text = re.sub(r'(?<!\(库斯途\))Custo(?!\s*\(库斯途\))', 'CUS2_MARKER', text)
    text = text.replace('CUS2_MARKER', 'Custo(库斯途)')
    text = re.sub(r'(?<!\(伊兰特\))Avante(?!\s*\(伊兰特\))', 'AVA_MARKER', text)
    text = text.replace('AVA_MARKER', 'Avante(伊兰特)')
    text = re.sub(r'(?<!\(伊兰特\))Elantra(?!\s*\(伊兰特\))', 'ELA_MARKER', text)
    text = text.replace('ELA_MARKER', 'Elantra(伊兰特)')
    text = re.sub(r'(?<!\(索纳塔\))Sonata(?!\s*\(索纳塔\))', 'SON_MARKER', text)
    text = text.replace('SON_MARKER', 'Sonata(索纳塔)')
    # Chung Euisun → Chung Euisun(郑义宣)（无连字符变体，Dify 2026-07-31 输出）
    text = re.sub(r'(?<!\(郑义宣\))Chung Euisun(?!\s*\(郑义宣\))', 'CEU_MARKER', text)
    text = text.replace('CEU_MARKER', 'Chung Euisun(郑义宣)')
    
    # ==================== 2026-08-01 新增：品牌/车型/人名/地名标注补全 ====================
    # 品牌整体标注（顺序敏感：Hyundai Motor India 必须在 Hyundai Motor 之前）
    text = re.sub(r'(?<!\(现代汽车印度\))Hyundai Motor India(?!\s*\(现代汽车印度\))', 'HMI_MARKER', text)
    text = text.replace('HMI_MARKER', 'Hyundai Motor India(现代汽车印度)')
    text = re.sub(r'(?<!\(现代汽车印度\))Hyundai India(?!\s*\(现代汽车印度\))', 'HID_MARKER', text)
    text = text.replace('HID_MARKER', 'Hyundai India(现代汽车印度)')
    # Hyundai Motor → Hyundai Motor(现代汽车)（排除已标注的 Hyundai Motor India）
    text = re.sub(r'(?<!\(现代汽车\))Hyundai Motor(?!\s*\(现代汽车\)|\s+India)', 'HM_MARKER', text)
    text = text.replace('HM_MARKER', 'Hyundai Motor(现代汽车)')
    # HIMA → HIMA(鸿蒙智行)
    text = re.sub(r'(?<!\(鸿蒙智行\))HIMA(?!\s*\(鸿蒙智行\))', 'HMA_MARKER', text)
    text = text.replace('HMA_MARKER', 'HIMA(鸿蒙智行)')
    # Hello Car Rental → Hello Car Rental(哈啰租车)
    text = re.sub(r'(?<!\(哈啰租车\))Hello Car Rental(?!\s*\(哈啰租车\))', 'HCR_MARKER', text)
    text = text.replace('HCR_MARKER', 'Hello Car Rental(哈啰租车)')
    # Jinzai Food → Jinzai Food(劲仔食品)
    text = re.sub(r'(?<!\(劲仔食品\))Jinzai Food(?!\s*\(劲仔食品\))', 'JZF_MARKER', text)
    text = text.replace('JZF_MARKER', 'Jinzai Food(劲仔食品)')
    # Semir → Semir(森马)
    text = re.sub(r'(?<!\(森马\))Semir(?!\s*\(森马\))', 'SMR_MARKER', text)
    text = text.replace('SMR_MARKER', 'Semir(森马)')
    # Pop Mart → Pop Mart(泡泡玛特)
    text = re.sub(r'(?<!\(泡泡玛特\))Pop Mart(?!\s*\(泡泡玛特\))', 'PM_MARKER', text)
    text = text.replace('PM_MARKER', 'Pop Mart(泡泡玛特)')
    # MINISO → MINISO(名创优品)
    text = re.sub(r'(?<!\(名创优品\))MINISO(?!\s*\(名创优品\))', 'MNO_MARKER', text)
    text = text.replace('MNO_MARKER', 'MINISO(名创优品)')
    # ARCFOX → ARCFOX(极狐)
    text = re.sub(r'(?<!\(极狐\))ARCFOX(?!\s*\(极狐\))', 'ARF_MARKER', text)
    text = text.replace('ARF_MARKER', 'ARCFOX(极狐)')
    # Arcfox → Arcfox(极狐)（Dify 2026-08-01 小写变体）
    text = re.sub(r'(?<!\(极狐\))Arcfox(?!\s*\(极狐\))', 'ARF2_MARKER', text)
    text = text.replace('ARF2_MARKER', 'Arcfox(极狐)')
    # Alpha T7 → Alpha T7(阿尔法T7)
    text = re.sub(r'(?<!\(阿尔法T7\))Alpha T7(?!\s*\(阿尔法T7\))', 'AT7_MARKER', text)
    text = text.replace('AT7_MARKER', 'Alpha T7(阿尔法T7)')
    # MAEXTRO → MAEXTRO(尊界)（大写变体，Dify 2026-08-01 输出）
    text = re.sub(r'(?<!\(尊界\))MAEXTRO(?!\s*\(尊界\))', 'MXT_MARKER', text)
    text = text.replace('MXT_MARKER', 'MAEXTRO(尊界)')
    # Maextro → Maextro(尊界)（首字母大写变体，Dify 2026-08-01 输出）
    text = re.sub(r'(?<!\(尊界\))Maextro(?!\s*\(尊界\))', 'MXT2_MARKER', text)
    text = text.replace('MXT2_MARKER', 'Maextro(尊界)')
    # STELATO 大写 → Stelato(享界)
    text = re.sub(r'(?<!\(享界\))STELATO(?!\s*\(享界\))', 'STU_MARKER', text)
    text = text.replace('STU_MARKER', 'Stelato(享界)')
    # Deepal → Deepal(深蓝)
    text = re.sub(r'(?<!\(深蓝\))Deepal(?!\s*\(深蓝\))', 'DP_MARKER', text)
    text = text.replace('DP_MARKER', 'Deepal(深蓝)')
    # Xinghai V6 → Xinghai V6(星海V6)
    text = re.sub(r'(?<!\(星海V6\))Xinghai V6(?!\s*\(星海V6\))', 'XHV_MARKER', text)
    text = text.replace('XHV_MARKER', 'Xinghai V6(星海V6)')
    # Huawei Qiankun → Huawei Qiankun(华为乾崑)
    text = re.sub(r'(?<!\(华为乾崑\))Huawei Qiankun(?!\s*\(华为乾崑\))', 'HQK_MARKER', text)
    text = text.replace('HQK_MARKER', 'Huawei Qiankun(华为乾崑)')
    # Pengcheng → Pengcheng(澎程)
    text = re.sub(r'(?<!\(澎程\))Pengcheng(?!\s*\(澎程\))', 'PC_MARKER', text)
    text = text.replace('PC_MARKER', 'Pengcheng(澎程)')
    # Unitree Robotics → Unitree Robotics(宇树科技)
    text = re.sub(r'(?<!\(宇树科技\))Unitree Robotics(?!\s*\(宇树科技\))', 'UR_MARKER', text)
    text = text.replace('UR_MARKER', 'Unitree Robotics(宇树科技)')
    # Eo Yio → Eo Yio(羿欧)（Dify 对 EO 的转写）
    text = re.sub(r'(?<!\(羿欧\))Eo Yio(?!\s*\(羿欧\))', 'EY_MARKER', text)
    text = text.replace('EY_MARKER', 'Eo Yio(羿欧)')
    # Kia Seltos → Kia Seltos(起亚赛图斯)（须在 Kia 之前）
    text = re.sub(r'(?<!\(起亚赛图斯\))Kia Seltos(?!\s*\(起亚赛图斯\))', 'KS_MARKER', text)
    text = text.replace('KS_MARKER', 'Kia Seltos(起亚赛图斯)')
    # Kia → Kia(起亚)（排除已标注的 Kia Seltos）
    text = re.sub(r'(?<!\(起亚\))Kia(?!\s*\(起亚\)|\s+Seltos)', 'KIA_MARKER', text)
    text = text.replace('KIA_MARKER', 'Kia(起亚)')
    # 人名
    text = re.sub(r'(?<!\(汤姆·赫兰德\))Tom Holland(?!\s*\(汤姆·赫兰德\))', 'TH_MARKER', text)
    text = text.replace('TH_MARKER', 'Tom Holland(汤姆·赫兰德)')
    text = re.sub(r'(?<!\(王俊凯\))Wang Junkai(?!\s*\(王俊凯\))', 'WJK_MARKER', text)
    text = text.replace('WJK_MARKER', 'Wang Junkai(王俊凯)')
    # 地名
    text = re.sub(r'(?<!\(突尼斯\))Tunisia(?!\s*\(突尼斯\))', 'TN_MARKER', text)
    text = text.replace('TN_MARKER', 'Tunisia(突尼斯)')
    
    # ==================== 2026-07-25 新增：人物名拼音→拼音(中文) ====================
    text = re.sub(r'(?<!\(迪丽热巴\))Dilraba Dilmurat(?!\s*\(迪丽热巴\))', 'DL_MARKER', text)
    text = text.replace('DL_MARKER', 'Dilraba Dilmurat(迪丽热巴)')
    text = re.sub(r'(?<!\(陈哲远\))Chen Zheyuan(?!\s*\(陈哲远\))', 'CZY_MARKER', text)
    text = text.replace('CZY_MARKER', 'Chen Zheyuan(陈哲远)')
    text = re.sub(r'(?<!\(宋佳\))Song Jia(?!\s*\(宋佳\))', 'SJ_MARKER', text)
    text = text.replace('SJ_MARKER', 'Song Jia(宋佳)')
    text = re.sub(r'(?<!\(王虹\))Wang Hong(?!\s*\(王虹\))', 'WH_MARKER', text)
    text = text.replace('WH_MARKER', 'Wang Hong(王虹)')
    text = re.sub(r'(?<!\(李凤刚\))Li Fenggang(?!\s*\(李凤刚\))', 'LFG_MARKER', text)
    text = text.replace('LFG_MARKER', 'Li Fenggang(李凤刚)')
    text = re.sub(r'(?<!\(朱松纯\))Zhu Songchun(?!\s*\(朱松纯\))', 'ZSC_MARKER', text)
    text = text.replace('ZSC_MARKER', 'Zhu Songchun(朱松纯)')
    text = re.sub(r'(?<!\(黄健翔\))Huang Jianxiang(?!\s*\(黄健翔\))', 'HJX_MARKER', text)
    text = text.replace('HJX_MARKER', 'Huang Jianxiang(黄健翔)')
    # 2026-08-11 新增：品牌热点人名标注补全
    text = re.sub(r'(?<!\(汪苏泷\))Wang Sulong(?!\s*\(汪苏泷\))', 'WSL_MARKER', text)
    text = text.replace('WSL_MARKER', 'Wang Sulong(汪苏泷)')
    text = re.sub(r'(?<!\(王彦桐\))Wang Yantong(?!\s*\(王彦桐\))', 'WYT_MARKER', text)
    text = text.replace('WYT_MARKER', 'Wang Yantong(王彦桐)')
    text = re.sub(r'(?<!\(刘雯\))Liu Wen(?!\s*\(刘雯\))', 'LW_MARKER', text)
    text = text.replace('LW_MARKER', 'Liu Wen(刘雯)')

    # ==================== 2026-08-01 追加：Dify自带标注 + 规则叠加的双重标注清理 ====================
    # Dify 重译输出常自带中文标注（如 ARCFOX(极狐汽车)、Eo Yio(EO羿欧)、Tom Holland(荷兰弟)），
    # 与规则标注叠加成 X(中文)(中文) 双重标注，需清理为单一标注。
    text = re.sub(r'ARCFOX\(极狐\)\(极狐汽车\)', 'ARCFOX(极狐)', text)
    text = re.sub(r'Arcfox\(极狐\)\(极狐汽车\)', 'Arcfox(极狐)', text)
    text = re.sub(r'Eo Yio\(羿欧\)\(EO羿欧\)', 'Eo Yio(羿欧)', text)
    text = re.sub(r'Tom Holland\(汤姆·赫兰德\)\(荷兰弟\)', 'Tom Holland(汤姆·赫兰德)', text)
    text = re.sub(r'Semir\(森马\)\(森马服饰\)', 'Semir(森马)', text)
    text = re.sub(r'HIMA\(鸿蒙智行\)\(鸿蒙智行汽车\)', 'HIMA(鸿蒙智行)', text)
    
    text = re.sub(r'(?<!\(帕里斯帝\))Palisade(?!\s*\(帕里斯帝\))', 'PAL_MARKER', text)
    text = text.replace('PAL_MARKER', 'Palisade(帕里斯帝)')
    text = re.sub(r'(?<!\(胜达\))Santa Fe(?!\s*\(胜达\))', 'SF_MARKER', text)
    text = text.replace('SF_MARKER', 'Santa Fe(胜达)')
    text = re.sub(r'(?<!\(沐飒\))Mufasa(?!\s*\(沐飒\))', 'MUF_MARKER', text)
    text = text.replace('MUF_MARKER', 'Mufasa(沐飒)')
    text = re.sub(r'(?<!\(驻马店\))Zhumadian(?!\s*\(驻马店\))', 'ZMD_MARKER', text)
    text = text.replace('ZMD_MARKER', 'Zhumadian(驻马店)')
    text = re.sub(r'(?<!\(美的\))Midea(?!\s*\(美的\))', 'MD_MARKER', text)
    text = text.replace('MD_MARKER', 'Midea(美的)')
    text = re.sub(r'(?<!\(盖璞\))GAP(?!\s*\(盖璞\))', 'GAP_MARKER', text)
    text = text.replace('GAP_MARKER', 'GAP(盖璞)')
    text = re.sub(r'(?<!\(蜘蛛侠\))Spider-Man(?!\s*\(蜘蛛侠\))', 'SPM_MARKER', text)
    text = text.replace('SPM_MARKER', 'Spider-Man(蜘蛛侠)')
    text = re.sub(r'(?<!\(央视\))CCTV(?!\s*\(央视\))', 'CCTV_MARKER', text)
    text = text.replace('CCTV_MARKER', 'CCTV(央视)')

    # 2026-08-03 新增：Dify 输出英文品牌/人名/地名未标注中文
    text = re.sub(r'(?<!\(豆包\))Doubao(?!\s*\(豆包\))', 'DB_MARKER', text)
    text = text.replace('DB_MARKER', 'Doubao(豆包)')
    text = re.sub(r'(?<!\(飞书\))Feishu(?!\s*\(飞书\))', 'FS_MARKER', text)
    text = text.replace('FS_MARKER', 'Feishu(飞书)')
    text = re.sub(r'(?<!\(字节跳动\))ByteDance(?!\s*\(字节跳动\))', 'BD_MARKER', text)
    text = text.replace('BD_MARKER', 'ByteDance(字节跳动)')
    text = re.sub(r'(?<!\(腾讯\))Tencent(?!\s*\(腾讯\))', 'TC_MARKER', text)
    text = text.replace('TC_MARKER', 'Tencent(腾讯)')
    text = re.sub(r'(?<!\(阿里巴巴\))Alibaba(?!\s*\(阿里巴巴\))', 'ALI_MARKER', text)
    text = text.replace('ALI_MARKER', 'Alibaba(阿里巴巴)')
    text = re.sub(r'(?<!\(百丽\))Belle(?!\s*\(百丽\))', 'BL_MARKER', text)
    text = text.replace('BL_MARKER', 'Belle(百丽)')
    text = re.sub(r'(?<!\(观夏\))To Summer(?!\s*\(观夏\))', 'TS_MARKER', text)
    text = text.replace('TS_MARKER', 'To Summer(观夏)')
    text = re.sub(r'(?<!\(滴滴豪华车\))Didi Premier(?!\s*\(滴滴豪华车\))', 'DP_MARKER', text)
    text = text.replace('DP_MARKER', 'Didi Premier(滴滴豪华车)')
    text = re.sub(r'(?<!\(轻舟俱乐部\))Qingzhou Club(?!\s*\(轻舟俱乐部\))', 'QC_MARKER', text)
    text = text.replace('QC_MARKER', 'Qingzhou Club(轻舟俱乐部)')
    text = re.sub(r'(?<!\(真龙\))Zhenlong(?!\s*\(真龙\))', 'ZL_MARKER', text)
    text = text.replace('ZL_MARKER', 'Zhenlong(真龙)')
    text = re.sub(r'(?<!\(天眼查\))Tianyancha(?!\s*\(天眼查\))', 'TYC_MARKER', text)
    text = text.replace('TYC_MARKER', 'Tianyancha(天眼查)')
    text = re.sub(r'(?<!\(蚂蚁灵波\))Ant Lingbo(?!\s*\(蚂蚁灵波\))', 'ALB_MARKER', text)
    text = text.replace('ALB_MARKER', 'Ant Lingbo(蚂蚁灵波)')
    text = re.sub(r'(?<!\(海联金汇\))Hailian Jinhui(?!\s*\(海联金汇\))', 'HJH_MARKER', text)
    text = text.replace('HJH_MARKER', 'Hailian Jinhui(海联金汇)')
    text = re.sub(r'(?<!\(墨西哥\))Mexico(?!\s*\(墨西哥\))', 'MX_MARKER', text)
    text = text.replace('MX_MARKER', 'Mexico(墨西哥)')
    text = re.sub(r'(?<!\(常斌\))Chang Bin(?!\s*\(常斌\))', 'CB_MARKER', text)
    text = text.replace('CB_MARKER', 'Chang Bin(常斌)')
    text = re.sub(r'(?<!\(章若楠\))Zhang Ruonan(?!\s*\(章若楠\))', 'ZRN_MARKER', text)
    text = text.replace('ZRN_MARKER', 'Zhang Ruonan(章若楠)')
    text = re.sub(r'(?<!\(王思聪\))Wang Sicong(?!\s*\(王思聪\))', 'WSC_MARKER', text)
    text = text.replace('WSC_MARKER', 'Wang Sicong(王思聪)')
    text = re.sub(r'(?<!\(王健林\))Wang Jianlin(?!\s*\(王健林\))', 'WJL_MARKER', text)
    text = text.replace('WJL_MARKER', 'Wang Jianlin(王健林)')
    text = re.sub(r'(?<!\(万达产业投资\))Wanda Industrial Investment Company(?!\s*\(万达产业投资\))', 'WDC_MARKER', text)
    text = text.replace('WDC_MARKER', 'Wanda Industrial Investment Company(万达产业投资)')

    # ==================== 2026-08-03 追加：车型热点品牌/车型标注补全 ====================
    # 샤오펑(Xpeng) → Xpeng(小鹏)（韩文(英文)格式转换，同 아이토(AITO) 处理）
    text = re.sub(r'샤오펑\(Xpeng\)', 'Xpeng(小鹏)', text)
    # Fangchengbao → Fangchengbao(方程豹)
    text = re.sub(r'(?<!\(方程豹\))Fangchengbao(?!\s*\(方程豹\))', 'FCB_MARKER', text)
    text = text.replace('FCB_MARKER', 'Fangchengbao(方程豹)')
    # Titanium 9 → Titanium 9(钛9)
    text = re.sub(r'(?<!\(钛9\))Titanium 9(?!\s*\(钛9\))', 'T9_MARKER', text)
    text = text.replace('T9_MARKER', 'Titanium 9(钛9)')
    # Lu Shang → Lu Shang(陆尚)
    text = re.sub(r'(?<!\(陆尚\))Lu Shang(?!\s*\(陆尚\))', 'LS_MARKER', text)
    text = text.replace('LS_MARKER', 'Lu Shang(陆尚)')

    # ==================== 2026-08-04 追加：brand/vehicle 人名与品牌标注补全 ====================
    # 周杰伦：先清 Dify 自带带描述标注 Jay Chou(周杰伦, 대중문화 icon) → 规范拼音格式
    text = re.sub(r'Jay Chou\(周杰伦[^)]*\)', 'Zhou Jielun(周杰伦)', text)
    text = re.sub(r'(?<!\(周杰伦\))Jay Chou(?!\s*\(周杰伦\))', 'ZJL_MARKER', text)
    text = text.replace('ZJL_MARKER', 'Zhou Jielun(周杰伦)')
    # 樊振东：先清 Dify 自带带描述标注
    text = re.sub(r'Fan Zhendong\(樊振东[^)]*\)', 'Fan Zhendong(樊振东)', text)
    text = re.sub(r'(?<!\(樊振东\))Fan Zhendong(?!\s*\(樊振东\))', 'FZD_MARKER', text)
    text = text.replace('FZD_MARKER', 'Fan Zhendong(樊振东)')
    # PROYA → PROYA(珀莱雅)
    text = re.sub(r'(?<!\(珀莱雅\))PROYA(?!\s*\(珀莱雅\))', 'PROYA_MARKER', text)
    text = text.replace('PROYA_MARKER', 'PROYA(珀莱雅)')
    # Pingu → Pingu(企鹅家族)
    text = re.sub(r'(?<!\(企鹅家族\))Pingu(?!\s*\(企鹅家族\))', 'PG_MARKER', text)
    text = text.replace('PG_MARKER', 'Pingu(企鹅家族)')
    # LEGO → LEGO(乐高)
    text = re.sub(r'(?<!\(乐高\))LEGO(?!\s*\(乐高\))', 'LEGO_MARKER', text)
    text = text.replace('LEGO_MARKER', 'LEGO(乐高)')
    # RIMOWA → RIMOWA(日默瓦)
    text = re.sub(r'(?<!\(日默瓦\))RIMOWA(?!\s*\(日默瓦\))', 'RIMOWA_MARKER', text)
    text = text.replace('RIMOWA_MARKER', 'RIMOWA(日默瓦)')
    # KFC → KFC(肯德基)
    text = re.sub(r'(?<!\(肯德基\))KFC(?!\s*\(肯德基\))', 'KFC_MARKER', text)
    text = text.replace('KFC_MARKER', 'KFC(肯德基)')
    # Crayon Shin-chan → Crayon Shin-chan(蜡笔小新)（必须先于 Shin-chan）
    text = re.sub(r'(?<!\(蜡笔小新\))Crayon Shin-chan(?!\s*\(蜡笔小新\))', 'CSC_MARKER', text)
    text = text.replace('CSC_MARKER', 'Crayon Shin-chan(蜡笔小新)')
    # Shin-chan 独立出现 → Shin-chan(蜡笔小新)
    text = re.sub(r'(?<!Crayon )(?<!\(蜡笔小新\))Shin-chan(?!\s*\(蜡笔小新\))', 'SC_MARKER', text)
    text = text.replace('SC_MARKER', 'Shin-chan(蜡笔小新)')
    # Gundam → Gundam(高达)
    text = re.sub(r'(?<!\(高达\))Gundam(?!\s*\(高达\))', 'GDM_MARKER', text)
    text = text.replace('GDM_MARKER', 'Gundam(高达)')
    # Slam Dunk → Slam Dunk(灌篮高手)
    text = re.sub(r'(?<!\(灌篮高手\))Slam Dunk(?!\s*\(灌篮高手\))', 'SD_MARKER', text)
    text = text.replace('SD_MARKER', 'Slam Dunk(灌篮高手)')
    # SAIC Volkswagen → SAIC Volkswagen(上汽大众)
    text = re.sub(r'(?<!\(上汽大众\))SAIC Volkswagen(?!\s*\(上汽大众\))', 'SAICVW_MARKER', text)
    text = text.replace('SAICVW_MARKER', 'SAIC Volkswagen(上汽大众)')
    # Volvo → Volvo(沃尔沃)
    text = re.sub(r'(?<!\(沃尔沃\))Volvo(?!\s*\(沃尔沃\))', 'VOLVO_MARKER', text)
    text = text.replace('VOLVO_MARKER', 'Volvo(沃尔沃)')
    text = re.sub(r'(?<!\(瑞幸咖啡\))Luckin Coffee(?!\s*\(瑞幸咖啡\))', 'LC_MARKER', text)
    text = text.replace('LC_MARKER', 'Luckin Coffee(瑞幸咖啡)')
    text = re.sub(r'(?<!\(卡骆驰\))Crocs(?!\s*\(卡骆驰\))', 'CR2_MARKER', text)
    text = text.replace('CR2_MARKER', 'Crocs(卡骆驰)')
    text = re.sub(r'(?<!\(磨物\))MOOWU(?!\s*\(磨物\))', 'MOOWU_MARKER', text)
    text = text.replace('MOOWU_MARKER', 'MOOWU(磨物)')
    text = re.sub(r'(?<!\(奥利奥\))Oreo(?!\s*\(奥利奥\))', 'OREO_MARKER', text)
    text = text.replace('OREO_MARKER', 'Oreo(奥利奥)')
    text = re.sub(r'(?<!\(潘多拉珠宝\))Pandora Jewelry(?!\s*\(潘多拉珠宝\))', 'PDJ_MARKER', text)
    text = text.replace('PDJ_MARKER', 'Pandora Jewelry(潘多拉珠宝)')
    text = re.sub(r'(?<!\(潘多拉\))Pandora(?!\s*\(潘多拉\))', 'PD_MARKER', text)
    text = text.replace('PD_MARKER', 'Pandora(潘多拉)')
    text = re.sub(r'(?<!\(高通骁龙\))Qualcomm Snapdragon(?!\s*\(高通骁龙\))', 'QCS_MARKER', text)
    text = text.replace('QCS_MARKER', 'Qualcomm Snapdragon(高通骁龙)')
    text = re.sub(r'(?<!\(玛莎拉蒂格雷嘉\))Maserati Grecale(?!\s*\(玛莎拉蒂格雷嘉\))', 'MSG_MARKER', text)
    text = text.replace('MSG_MARKER', 'Maserati Grecale(玛莎拉蒂格雷嘉)')
    text = re.sub(r'(?<!\(玛莎拉蒂\))Maserati(?!\s*\(玛莎拉蒂\)|\s+Grecale)', 'MS_MARKER', text)
    text = text.replace('MS_MARKER', 'Maserati(玛莎拉蒂)')
    text = re.sub(r'(?<!\(上汽集团\))SAIC Group(?!\s*\(上汽集团\))', 'SAICG_MARKER', text)
    text = text.replace('SAICG_MARKER', 'SAIC Group(上汽集团)')
    text = re.sub(r'(?<!\(通用汽车\))General Motors(?!\s*\(通用汽车\))', 'GM_MARKER', text)
    text = text.replace('GM_MARKER', 'General Motors(通用汽车)')
    text = re.sub(r'(?<!\(上汽通用\))SAIC-GM(?!\s*\(上汽通用\))', 'SAICGM_MARKER', text)
    text = text.replace('SAICGM_MARKER', 'SAIC-GM(上汽通用)')
    text = re.sub(r'(?<!\(东风风神\))Dongfeng Aeolus(?!\s*\(东风风神\))', 'DFA_MARKER', text)
    text = text.replace('DFA_MARKER', 'Dongfeng Aeolus(东风风神)')
    text = re.sub(r'(?<!\(华星\))Huaxing(?!\s*\(华星\))', 'HX_MARKER', text)
    text = text.replace('HX_MARKER', 'Huaxing(华星)')
    text = re.sub(r'(?<!\(纵横F700\))Zongheng F700(?!\s*\(纵横F700\))', 'ZHF_MARKER', text)
    text = text.replace('ZHF_MARKER', 'Zongheng F700(纵横F700)')
    text = re.sub(r'(?<!\(胖东来\))Pangdonglai(?!\s*\(胖东来\))', 'PDL_MARKER', text)
    text = text.replace('PDL_MARKER', 'Pangdonglai(胖东来)')
    # Hyundai → Hyundai(现代)（排除已标注的 Beijing Hyundai / Hyundai Motor / Hyundai India）
    text = re.sub(r'(?<!Beijing )(?<!\(现代\))Hyundai(?!\s*\(现代\)|\s+Motor|\s+India|\(北京现代\))', 'HYU_MARKER', text)
    text = text.replace('HYU_MARKER', 'Hyundai(现代)')
    text = re.sub(r'(?<!\(东风日产\))둥펑닛산(?!\s*\(东风日产\))', 'DFN_MARKER', text)
    text = text.replace('DFN_MARKER', 'Dongfeng Nissan(东风日产)')
    text = text.replace('둥펑닛산(东风日产)', 'Dongfeng Nissan(东风日产)')
    text = re.sub(r'(?<!\(东风日产\))Dongfeng Nissan(?!\s*\(东风日产\))', 'DFN2_MARKER', text)
    text = text.replace('DFN2_MARKER', 'Dongfeng Nissan(东风日产)')


    # 库斯途韩文误译还原（Dify 常把 Custo 误译为 스타리아，2026-08-06 新增）
    text = text.replace('스타리아(Custo(库斯途))', 'Custo(库斯途)')
    text = text.replace('스타리아', 'Custo(库斯途)')

    # ==================== 2026-08-06 新增：品牌/人名/地名标注补全 ====================
    # Levi's → Levi's(李维斯)（国际品牌）
    text = re.sub(r"(?<!\(李维斯\))Levi's(?!\s*\(李维斯\))", 'LEV_MARKER', text)
    text = text.replace('LEV_MARKER', "Levi's(李维斯)")
    # ROSÉ → ROSÉ(朴彩英)（BLACKPINK 成员人名）
    text = re.sub(r'(?<!\(朴彩英\))ROSÉ(?!\s*\(朴彩英\))', 'ROS_MARKER', text)
    text = text.replace('ROS_MARKER', 'ROSÉ(朴彩英)')
    # Ambrosial → Ambrosial(安慕希)（伊利酸奶品牌）
    text = re.sub(r'(?<!\(安慕希\))Ambrosial(?!\s*\(安慕希\))', 'AMB_MARKER', text)
    text = text.replace('AMB_MARKER', 'Ambrosial(安慕希)')
    # Marvel → Marvel(漫威)（IP 品牌）
    text = re.sub(r'(?<!\(漫威\))Marvel(?!\s*\(漫威\))', 'MAR_MARKER', text)
    text = text.replace('MAR_MARKER', 'Marvel(漫威)')
    # HEYTEA → HEYTEA(喜茶)（中国品牌）
    text = re.sub(r'(?<!\(喜茶\))HEYTEA(?!\s*\(喜茶\))', 'HEY_MARKER', text)
    text = text.replace('HEY_MARKER', 'HEYTEA(喜茶)')
    # India → India(印度)（地名，排除已标注的 Hyundai India）
    text = re.sub(r'(?<!Hyundai )India(?!\s*\(印度\))', 'IND_MARKER', text)
    text = text.replace('IND_MARKER', 'India(印度)')
    # Barcelona → Barcelona(巴塞罗那)（地名）
    text = re.sub(r'(?<!\(巴塞罗那\))Barcelona(?!\s*\(巴塞罗那\))', 'BAR_MARKER', text)
    text = text.replace('BAR_MARKER', 'Barcelona(巴塞罗那)')
    # Greece → Greece(希腊)（艺术节名）
    text = re.sub(r'(?<!\(希腊\))Greece(?!\s*\(希腊\))', 'GRE_MARKER', text)
    text = text.replace('GRE_MARKER', 'Greece(希腊)')
    # Mobile News → Mobile News(手机新闻)（CNMO 栏目名）
    text = re.sub(r'(?<!\(手机新闻\))Mobile News(?!\s*\(手机新闻\))', 'MBN_MARKER', text)
    text = text.replace('MBN_MARKER', 'Mobile News(手机新闻)')



    # 2026-08-07 新增规则块内容（已写入脚本，改脚本时勿删）：
    # Yihetang(益禾堂)、Yu'e Bao(余额宝)、Zanzhe(攒着)、Ocean Engine(巨量引擎)、Douyin Life Service(抖音生活服务)、
    # Dali(大理)、Yunxiangshan(云想山)、Yunbian Daxiao Show(云边大小秀)、Auntea Jenny(沪上阿姨)、Wey(魏牌)、
    # Jetour(捷途)、HuanYouZhe(环游者)、BAIC Off-road Xingtan(北京越野星钽)、Xingyun Zhixing(行云智行)、Tai(钛)、
    # Sportage(狮铂拓界)、Palian(帕力安)、Hydrogen Technology(氢能科技)、Cheongju(清州)、
    # Red Dot Design Award(红点设计奖)、Xiyou Renjianxing(西游人间行)、Municipal Cyberspace Administration(市网信办)
    text = re.sub(r'(?<!\(益禾堂\))Yihetang(?!\s*\(益禾堂\))', 'YHT_MARKER', text)
    text = text.replace('YHT_MARKER', 'Yihetang(益禾堂)')
    text = re.sub(r"(?<!\(余额宝\))Yu'e Bao(?!\s*\(余额宝\))", 'YEB_MARKER', text)
    text = text.replace('YEB_MARKER', "Yu'e Bao(余额宝)")
    text = re.sub(r'(?<!\(攒着\))Zanzhe(?!\s*\(攒着\))', 'ZZ_MARKER', text)
    text = text.replace('ZZ_MARKER', 'Zanzhe(攒着)')
    text = re.sub(r'(?<!\(巨量引擎\))Ocean Engine(?!\s*\(巨量引擎\))', 'OE_MARKER', text)
    text = text.replace('OE_MARKER', 'Ocean Engine(巨量引擎)')
    text = re.sub(r'(?<!\(抖音生活服务\))Douyin Life Service(?!\s*\(抖音生活服务\))', 'DLS_MARKER', text)
    text = text.replace('DLS_MARKER', 'Douyin Life Service(抖音生活服务)')
    text = re.sub(r'(?<!\(大理\))Dali(?!\s*\(大理\))', 'DL_MARKER', text)
    text = text.replace('DL_MARKER', 'Dali(大理)')
    text = re.sub(r'(?<!\(云想山\))Yunxiangshan(?!\s*\(云想山\))', 'YXS_MARKER', text)
    text = text.replace('YXS_MARKER', 'Yunxiangshan(云想山)')
    text = re.sub(r'(?<!\(云边大小秀\))Yunbian Daxiao Show(?!\s*\(云边大小秀\))', 'YBDS_MARKER', text)
    text = text.replace('YBDS_MARKER', 'Yunbian Daxiao Show(云边大小秀)')
    text = re.sub(r'(?<!\(沪上阿姨\))Auntea Jenny(?!\s*\(沪上阿姨\))', 'AJ_MARKER', text)
    text = text.replace('AJ_MARKER', 'Auntea Jenny(沪上阿姨)')
    text = re.sub(r'(?<!\(魏牌\))Wey(?!\s*\(魏牌\))', 'WEY_MARKER', text)
    text = text.replace('WEY_MARKER', 'Wey(魏牌)')
    text = re.sub(r'(?<!\(捷途\))Jetour(?!\s*\(捷途\))', 'JT_MARKER', text)
    text = text.replace('JT_MARKER', 'Jetour(捷途)')
    text = re.sub(r'(?<!\(环游者\))HuanYouZhe(?!\s*\(环游者\))', 'HYZ_MARKER', text)
    text = text.replace('HYZ_MARKER', 'HuanYouZhe(环游者)')
    text = re.sub(r'(?<!\(北京越野星钽\))BAIC Off-road Xingtan(?!\s*\(北京越野星钽\))', 'BOXS_MARKER', text)
    text = text.replace('BOXS_MARKER', 'BAIC Off-road Xingtan(北京越野星钽)')
    text = re.sub(r'(?<!\(行云智行\))Xingyun Zhixing(?!\s*\(行云智行\))', 'XYZ_MARKER', text)
    text = text.replace('XYZ_MARKER', 'Xingyun Zhixing(行云智行)')
    text = re.sub(r'(?<!\(钛\))Tai(?=\s*9)', 'TAI_MARKER', text)
    text = text.replace('TAI_MARKER', 'Tai(钛)')
    text = re.sub(r'(?<!\(狮铂拓界\))Sportage(?!\s*\(狮铂拓界\))', 'SPT_MARKER', text)
    text = text.replace('SPT_MARKER', 'Sportage(狮铂拓界)')
    text = re.sub(r'(?<!\(帕力安\))Palian(?!\s*\(帕力安\))', 'PL_MARKER', text)
    text = text.replace('PL_MARKER', 'Palian(帕力安)')
    text = re.sub(r'(?<!\(氢能科技\))Hydrogen Technology(?!\s*\(氢能科技\))', 'HT_MARKER', text)
    text = text.replace('HT_MARKER', 'Hydrogen Technology(氢能科技)')
    text = re.sub(r'(?<!\(清州\))Cheongju(?!\s*\(清州\))', 'CJ_MARKER', text)
    text = text.replace('CJ_MARKER', 'Cheongju(清州)')
    text = re.sub(r'(?<!\(红点设计奖\))Red Dot Design Award(?!\s*\(红点设计奖\))', 'RDDA_MARKER', text)
    text = text.replace('RDDA_MARKER', 'Red Dot Design Award(红点设计奖)')
    text = re.sub(r'(?<!\(西游人间行\))Xiyou Renjianxing(?!\s*\(西游人间行\))', 'XYRJX_MARKER', text)
    text = text.replace('XYRJX_MARKER', 'Xiyou Renjianxing(西游人间行)')
    text = re.sub(r'(?<!\(市网信办\))Municipal Cyberspace Administration(?!\s*\(市网信办\))', 'MCA_MARKER', text)
    text = text.replace('MCA_MARKER', 'Municipal Cyberspace Administration(市网信办)')

    # ==================== 2026-08-10 新增：品牌/车型/人名/地名标注补全 ====================
    # ⚠️ 用户 2026-08-10 新规：「Momenta R7 不做处理；英文品牌名直接显示英文即可」
    # 例外：Dodge 单独出现时仍按 SKILL.md 既有规则加注 Dodge(道奇)（整体 Dodge Charger Super Bee 保留为车型名不加注）
    # Dodge → Dodge(道奇)（排除已标注的 Dodge Charger Super Bee/已有道奇标注）
    text = re.sub(r'(?<!Dodge Charger Super )(?<!Dodge Charger )(?<!Dodge )(Dodge)(?!\s*\(道奇\)|\s+Charger)', 'DODGE_MARKER', text)
    text = text.replace('DODGE_MARKER', 'Dodge(道奇)')

    # ==================== 2026-08-12 新增：车型板块品牌/车型中文标注 ====================
    # 规则：中文文件中品牌/车型为中文时，韩文版标注为 英文(中文) 形式
    # ⚠️ 负向前视必须用单反斜杠 \s*（2026-08-11 人名重复bug教训：\\s* 会匹配字面反斜杠导致防重复失效）
    # Volkswagen(大众) — 排除已标注
    text = re.sub(r'(?<!\\(大众\\))Volkswagen(?!\s*\(大众\))', 'VW_MARKER', text)
    text = text.replace('VW_MARKER', 'Volkswagen(大众)')
    # Ford(福特) — 排除已标注
    text = re.sub(r'(?<!\\(福特\\))Ford(?!\s*\(福特\))', 'FORD_MARKER', text)
    text = text.replace('FORD_MARKER', 'Ford(福特)')
    # Escape(锐际) — 排除已标注
    text = re.sub(r'(?<!\\(锐际\\))Escape(?!\s*\(锐际\))', 'ESC_MARKER', text)
    text = text.replace('ESC_MARKER', 'Escape(锐际)')
    # JETOUR(捷途) — 排除已标注
    text = re.sub(r'(?<!\\(捷途\\))JETOUR(?!\s*\(捷途\))', 'JET_MARKER', text)
    text = text.replace('JET_MARKER', 'JETOUR(捷途)')
    # Traveler 7(旅行者7) — 排除已标注（须在 JETOUR 之后，避免 JETOUR Traveler 被拆）
    text = re.sub(r'(?<!\\(旅行者7\\))Traveler 7(?!\s*\(旅行者7\))', 'TRAV7_MARKER', text)
    text = text.replace('TRAV7_MARKER', 'Traveler 7(旅行者7)')
    # Cadillac(凯迪拉克) — 排除已标注
    text = re.sub(r'(?<!\\(凯迪拉克\\))Cadillac(?!\s*\(凯迪拉克\))', 'CAD_MARKER', text)
    text = text.replace('CAD_MARKER', 'Cadillac(凯迪拉克)')

        # ==================== 2026-08-14 新增：品牌/人名/平台标注补全 ====================
    # 规则：中文文件中品牌/车型为中文时，韩文版标注为 英文(中文) 形式
    # Altman(奥尔特曼) — 人名
    text = re.sub(r'(?<!\(奥尔特曼\))Altman(?!\s*\(奥尔特曼\))', 'ALTMAN_MARKER', text)
    text = text.replace('ALTMAN_MARKER', 'Altman(奥尔特曼)')
    # Apple(苹果) — 品牌
    text = re.sub(r'(?<!\(苹果\))Apple(?!\s*\(苹果\))', 'APPLE_MARKER', text)
    text = text.replace('APPLE_MARKER', 'Apple(苹果)')
    # Amazon(亚马逊) — 品牌
    text = re.sub(r'(?<!\(亚马逊\))Amazon(?!\s*\(亚马逊\))', 'AMZN_MARKER', text)
    text = text.replace('AMZN_MARKER', 'Amazon(亚马逊)')
    # Porsche(保时捷) — 品牌
    text = re.sub(r'(?<!\(保时捷\))Porsche(?!\s*\(保时捷\))', 'POR_MARKER', text)
    text = text.replace('POR_MARKER', 'Porsche(保时捷)')
    # China Mobile(中国移动) — 品牌
    text = re.sub(r'(?<!\(中国移动\))China Mobile(?!\s*\(中国移动\))', 'CM_MARKER', text)
    text = text.replace('CM_MARKER', 'China Mobile(中国移动)')
    # MIXUE(蜜雪冰城) — 品牌
    text = re.sub(r'(?<!\(蜜雪冰城\))MIXUE(?!\s*\(蜜雪冰城\))', 'MX_MARKER', text)
    text = text.replace('MX_MARKER', 'MIXUE(蜜雪冰城)')
    # Snow King(雪王) — 品牌/IP
    text = re.sub(r'(?<!\(雪王\))Snow King(?!\s*\(雪王\))', 'SNK_MARKER', text)
    text = text.replace('SNK_MARKER', 'Snow King(雪王)')
    # Chery QQ3(奇瑞QQ3) — 车型（须在 Chery 之前，避免拆分）
    text = re.sub(r'(?<!\(奇瑞QQ3\))Chery QQ3(?!\s*\(奇瑞QQ3\))', 'CQQ_MARKER', text)
    text = text.replace('CQQ_MARKER', 'Chery QQ3(奇瑞QQ3)')
    # Chery(奇瑞) — 品牌（排除 QQ3 尾词，避免拆分 Chery QQ3(奇瑞QQ3)）
    text = re.sub(r'(?<!\(奇瑞\))Chery(?!\s*\(奇瑞\)|\s+QQ3)', 'CHERY_MARKER', text)
    text = text.replace('CHERY_MARKER', 'Chery(奇瑞)')
    # Mobis(摩比斯) — 品牌
    text = re.sub(r'(?<!\(摩比斯\))Mobis(?!\s*\(摩比斯\))', 'MOB_MARKER', text)
    text = text.replace('MOB_MARKER', 'Mobis(摩比斯)')
    # Snapdragon(骁龙) — 芯片（排除 Qualcomm 前置/高通骁龙已标注）
    text = re.sub(r'(?<!Qualcomm )(?<!\(骁龙\))Snapdragon(?!\s*\(高通骁龙\)|\s*\(骁龙\))', 'SNAP_MARKER', text)
    text = text.replace('SNAP_MARKER', 'Snapdragon(骁龙)')
    # Lingyu Intelligence(灵御智能) — 公司名
    text = re.sub(r'(?<!\(灵御智能\))Lingyu Intelligence(?!\s*\(灵御智能\))', 'LY_MARKER', text)
    text = text.replace('LY_MARKER', 'Lingyu Intelligence(灵御智能)')
    # Tuling(途灵) — 华为途灵平台
    text = re.sub(r'(?<!\(途灵\))Tuling(?!\s*\(途灵\))', 'TUL_MARKER', text)
    text = text.replace('TUL_MARKER', 'Tuling(途灵)')
    # Yunian-C(云辇-C) — 云辇技术
    text = re.sub(r'(?<!\(云辇-C\))Yunian-C(?!\s*\(云辇-C\))', 'YNC_MARKER', text)
    text = text.replace('YNC_MARKER', 'Yunian-C(云辇-C)')
    # Marie Claire(嘉人) — 媒体名
    text = re.sub(r'(?<!\(嘉人\))Marie Claire(?!\s*\(嘉人\))', 'MC_MARKER', text)
    text = text.replace('MC_MARKER', 'Marie Claire(嘉人)')
    # Jiutian(九天) — 大模型名
    text = re.sub(r'(?<!\(九天\))Jiutian(?!\s*\(九天\))', 'JT_MARKER', text)
    text = text.replace('JT_MARKER', 'Jiutian(九天)')
    # Huawei(华为) — 品牌（排除 Qiankun 尾词，避免拆分 Huawei Qiankun(华为乾崑)）
    text = re.sub(r'(?<!\(华为\))Huawei(?!\s*\(华为\)|\s+Qiankun)', 'HW_MARKER', text)
    text = text.replace('HW_MARKER', 'Huawei(华为)')
    # Harmony Intelligent Mobility(鸿蒙智行) — 品牌全称（Dify 输出全称时标注）
    text = re.sub(r'(?<!\(鸿蒙智行\))Harmony Intelligent Mobility(?!\s*\(鸿蒙智行\))', 'HIM_MARKER', text)
    text = text.replace('HIM_MARKER', 'Harmony Intelligent Mobility(鸿蒙智行)')
    # Leapmotor(零跑) — Dify 常输出 립모터(Leapmotor)（韩文+英文），须转为英文(中文)
    text = re.sub(r'립모터\(Leapmotor\)', 'LEAP_MARKER', text)
    text = text.replace('LEAP_MARKER', 'Leapmotor(零跑)')
    # Kona(科纳) — Dify 常输出 코나(Kona)（韩文+英文），CN 源为英文 KONA 时须转为英文(中文)
    text = re.sub(r'코나\(Kona\)', 'KONA_MARKER', text)
    text = text.replace('KONA_MARKER', 'Kona')

    # ==================== 2026-08-14 新增：品牌标注补全 ====================
    # Xiaoxiang Dingding(小象顶顶) — 品牌热点
    text = re.sub(r'(?<!\(小象顶顶\))Xiaoxiang Dingding(?!\s*\(小象顶顶\))', 'XXDD_MARKER', text)
    text = text.replace('XXDD_MARKER', 'Xiaoxiang Dingding(小象顶顶)')
    # Xiaoxiang Supermarket(小象超市) — 品牌热点
    text = re.sub(r'(?<!\(小象超市\))Xiaoxiang Supermarket(?!\s*\(小象超市\))', 'XXSC_MARKER', text)
    text = text.replace('XXSC_MARKER', 'Xiaoxiang Supermarket(小象超市)')
    # Taobao(淘宝) — 品牌热点
    text = re.sub(r'(?<!\(淘宝\))Taobao(?!\s*\(淘宝\))', 'TB_MARKER', text)
    text = text.replace('TB_MARKER', 'Taobao(淘宝)')
    # Nitori(宜得利) — 品牌热点
    text = re.sub(r'(?<!\(宜得利\))Nitori(?!\s*\(宜得利\))', 'NT_MARKER', text)
    text = text.replace('NT_MARKER', 'Nitori(宜得利)')
    # firefly(萤火虫) — 车型品牌
    text = re.sub(r'(?<!\(萤火虫\))firefly(?!\s*\(萤火虫\))', 'FF_MARKER', text)
    text = text.replace('FF_MARKER', 'firefly(萤火虫)')
    # Wuling Xingguang M(五菱星光M) — 车型品牌
    text = re.sub(r'(?<!\(五菱星光M\))Wuling Xingguang M(?!\s*\(五菱星光M\))', 'WLXG_MARKER', text)
    text = text.replace('WLXG_MARKER', 'Wuling Xingguang M(五菱星光M)')
    # Horizon Robotics Xingkong(地平线星空) — 社会热点芯片
    text = re.sub(r'(?<!\(地平线星空\))Horizon Robotics Xingkong(?!\s*\(地平线星空\))', 'HRXK_MARKER', text)
    text = text.replace('HRXK_MARKER', 'Horizon Robotics Xingkong(地平线星空)')
    # Seltos(塞图斯) — 车型品牌
    text = re.sub(r'(?<!\(塞图斯\))Seltos(?!\s*\(塞图斯\))', 'SLT_MARKER', text)
    text = text.replace('SLT_MARKER', 'Seltos(塞图斯)')
    # Genesis(捷尼赛思) — 英文品牌（제네시스 已处理，英文直出时补标注）
    text = re.sub(r'(?<!\(捷尼赛思\))Genesis(?!\s*\(捷尼赛思\))', 'GNS_MARKER', text)
    text = text.replace('GNS_MARKER', 'Genesis(捷尼赛思)')

    return text


def process_file(json_path):
    """处理韩文JSON文件，替换所有文本字段中的错误用词"""
    with open(json_path, 'r', encoding='utf-8') as f:
        data = json.load(f)
    
    # 需要处理的字段列表
    text_fields = ['title', 'summary', 'focus_point', 'selection_reason',
                   'marketing_opportunity', 'core_topic', 'decision_advice']
    
    total_replacements = 0
    
    # dict格式（最终文件格式，含hero_summary/strategy_actions等顶层字段）
    if isinstance(data, dict):
        # 处理各板块
        for section_key in ['brand_hotspots', 'vehicle_hotspots', 'social_hotspots',
                            'hyundai_buzz_topics_domestic', 'hyundai_buzz_topics_international']:
            items = data.get(section_key, [])
            for item in items:
                for field in text_fields:
                    val = item.get(field, '')
                    if val:
                        new_val = apply_replacements(val)
                        if new_val != val:
                            item[field] = new_val
                            total_replacements += 1
        
        # 处理 hero_summary
        for i, s in enumerate(data.get('hero_summary', [])):
            new_s = apply_replacements(s)
            if new_s != s:
                data['hero_summary'][i] = new_s
                total_replacements += 1
        
        # 处理 strategy_actions
        for action in data.get('strategy_actions', []):
            for field in ['core_topic', 'decision_advice']:
                val = action.get(field, '')
                if val:
                    new_val = apply_replacements(val)
                    if new_val != val:
                        action[field] = new_val
                        total_replacements += 1
            for i, a in enumerate(action.get('actions', [])):
                new_a = apply_replacements(a)
                if new_a != a:
                    action['actions'][i] = new_a
                    total_replacements += 1
    
    # list格式（yes_data格式）
    elif isinstance(data, list):
        for entry in data:
            if not isinstance(entry, dict):
                continue
            for item in entry.get('list', []):
                for field in text_fields:
                    val = item.get(field, '')
                    if val:
                        new_val = apply_replacements(val)
                        if new_val != val:
                            item[field] = new_val
                            total_replacements += 1
    
    # 写回文件
    with open(json_path, 'w', encoding='utf-8') as f:
        json.dump(data, f, ensure_ascii=False, indent=2)
    
    return total_replacements


def main():
    if len(sys.argv) < 2:
        print('用法: python3 translate_replace.py <ko_json路径>')
        print('示例: python3 translate_replace.py /data/news/json/ko-0714data.json')
        sys.exit(1)
    
    json_path = sys.argv[1]
    count = process_file(json_path)
    print(f'✅ 已处理: {json_path}')
    print(f'   共替换 {count} 处')


if __name__ == '__main__':
    main()
