feat: 字幕质量提升——长时寒暄幻觉清洗 + 专名/成人隐语不直译

两部分同属字幕质量优化,共用 llm.py 翻译链路:

1) 长时寒暄幻觉词清洗(nodes/subtitle_cleanup.py)
   对展示时长超过阈值(默认 15s,实测 30s 幻觉占位 vs 2s 真实词的分界)
   且文本含收尾/开场寒暄(晚安、感谢观看等)的字幕,文本替换为 '-',
   由后续过滤流程移除;短时寒暄(如剧情中真实互道晚安)保留不误删。
    写文件前调用 。

2) 专名/隐语不直译(nodes/proper_nouns.py)
   片假名专名(人名/品牌/角色)与成人语境隐语是 LLM 误译重灾区:
   - ジンゴ 被误译成'芒果'、カンタくん 被保留日文而非音译;
   - マンゴー/バナナ/リンゴ/金玉/おまんこ/ちんちん 等在色情语境中
     是生殖器官代称,字面直译严重错译。
   整理三张规则表(专名/拟声词/成人隐语,用户提供隐语表),
    检测原文命中后动态注入翻译提示词,
   让 LLM 按正确语义处理。文档见 docs/proper_nouns.md。

测试(红→绿):
- tests/test_hallucination_mask.py:长时掩码/短时保留/非寒暄保留/阈值边界
- tests/test_proper_nouns.py:专名命中/拟声词/成人隐语/真实数据集成
- 真实 LLM 集成测试(完整 1440 行翻译 + 清洗 + 专名注入)通过
This commit is contained in:
2026-09-05 22:32:40 +08:00
parent fcdcfe020b
commit a032855210
6 changed files with 508 additions and 5 deletions
+82
View File
@@ -0,0 +1,82 @@
# 专有名词(不应直译)处理表
对于日语字幕的"日 → 中文"翻译,**片假名专有名词**(人名、品牌、角色名、
产品或道具名)是 LLM 误译的重灾区:模型常按罗马音/读音硬译,产生
"芒果"(ジンゴ)这类与原文无对应、甚至语义荒谬的结果。
下表依据**日语-中文翻译的通用规则 + 字幕场景实测**整理。当待翻译字幕
中出现表中"日文原文"时,应向翻译提示词动态注入对应规则(见
`nodes/proper_nouns.py``build_proper_noun_rule`),让 LLM 正确处理。
## 规则类别(处理策略)
| 类别 | 处理方式 | 示例 |
| --- | --- | --- |
| 人名 | 音译(保留姓氏/称谓),不直译字面义 | カンタくん → 康太君 / 坎塔君 |
| 品牌/产品名 | 保留原文或使用约定译名 | ニトリ → 尼达利 / ニトリ |
| 角色/道具专名 | 保留原文或按上下文意译,禁止按读音硬译 | ジンゴ → 保留"Jingo/ジンゴ",勿译"芒果" |
| 拟声/拟态词 | 用中文对应拟声词,不直译 | グリグリ → 钻、搅动 |
| 外来语缩写 | 还原英文含义而非音译 | リラックス → 放松(非"丽拉库斯" |
## 专名表(日文原文 → 处理建议 → 说明)
| 日文原文 | 音频读音 | 中文处理建议 | 说明(来源/原因) |
| --- | --- | --- | --- |
| ジンゴ | jingo | **保留原文"ジンゴ/Jingo"**,或按上下文意译为角色/道具名 | 实测被误译"芒果"(4500s)。片假名专名,勿按读音硬译 |
| マンゴー | mango | **保留"マンゴー/Mango"**;仅当确指水果作"芒果" | 品牌/专名可能,注意与"芒果"同音误译 |
| カンタくん | kanta-kun | 音译"康太君/坎塔君" | 人名(3803s),勿留日文或直译 |
| 松井 | matusui | 松井(姓氏,汉字保留) | 人名,参考字幕确认"松井小姐" |
| ひな子 | hinako | 日奈子 / 雏子 | 人名(参考字幕"松井日奈子" |
| カリン | karin | 果林 / 花梨 | 人名(参考字幕"北冈果林/果林前辈" |
| 北岡 | kitaoka | 北冈(汉字保留) | 人名 |
| 権藤 | gondo | 权藤 / 昆藤 | 人名(参考"医务室长权藤" |
| 金山 | kanayama | 金山(汉字保留) | 人名(参考"金山先生" |
## 高频"伪专名"(拟声/口语,勿按字面直译)
| 日文 | 正确中文处理 | 错误直译(勿用) |
| --- | --- | --- |
| パンパン | 鼓胀、饱满、涨满 | 砰砰 |
| グリグリ | 用力碾/钻、搅动 | 咕噜咕噜 |
| チンポ | 肉棒/鸡巴(俗语) | 金宝(音译) |
| ビクビク | 一颤一颤、哆嗦 | 比库比库 |
| ヌルヌル | 滑溜溜、黏糊糊 | 奴鲁奴鲁 |
| ビンビン | 硬邦邦、精神十足 | 宾宾 |
| マット | 垫子(借词) | 马特 |
| リラックス | 放松(借词) | 丽拉库斯 |
| ララ | (含语音节)保持原文/按语境 | 拉拉 |
## 用法
翻译节点 `nodes/llm.py``translate_lines` 在组装系统提示词时,调用
`nodes/proper_nouns.py``build_proper_noun_rule(terms)`,把"若字幕中出现
下表专名 → 附加对应翻译规则"的指令拼入提示词;匹配基于原文文本包含判断,
未命中时不注入(避免干扰普通翻译)。
## 成人语境隐语/俗称表(新增,实测来源)
AV/成人内容字幕中,LLM 最易按**字面直译**造成严重错译。以下为高频隐语,
翻译时应按"实际含义"的常用中文翻译处理:
| 日文原文 | 读音 | 实际含义 | 对应中文常用翻译 |
| --- | --- | --- | --- |
| マンゴー | Mango | 女性生殖器 | 小穴、鲍鱼、妹妹(若谐音梗可保留"芒果"|
| バナナ | Banana | 男性生殖器 | 肉棒、鸡鸡、老二(画面打码可译"香肠"|
| リンゴ | Ringo | 睾丸(阴囊) | 蛋蛋(若出自"淫梦"梗可保留"苹果"并注释)|
| ちんぽう | chinpou | 男性生殖器 | 阳具、鸡巴(粗俗)|
| ちんちん | chinchin | 男性生殖器 | 小鸡鸡(委婉,对应童语)|
| 金玉 | kintama | 睾丸 | 蛋蛋、睾丸(正式)|
| にくつぼ | nikutsubo | 女性生殖器 | 肉洞、蜜穴(偏文学性);小穴(口语)|
| おまんこ | omanko | 女性生殖器 | 小穴、阴部 |
| おそそ | ososo | 女性生殖器 | 那里、下面(委婉)|
| オチンチン | ochinchin | 男性生殖器 | 小弟弟(常用);网络流行语可直译"欧金金"|
| ほんばん | honban | 真实插入的性行为 | 真枪实弹、来真的、本番(音译)|
| すまた | sumata | 股间摩擦(不插入)| 素股(音译最常用)、腿交、磨大腿 |
| せいかん | seikan | 户外/野外性行为 | 野战、户外做爱 |
| エッチ | etchi | 性行为/色情的 | 做爱、嘿咻、H(音译)|
| アヘ顔 | ahegao | 高潮时翻白眼吐舌的表情 | 阿黑颜(音译)、高潮脸、失神脸 |
> 以上隐语**仅在成人/色情语境成立**。若文本语境明确为普通水果/物品(如菜谱、
> 生活对话),仍按字面翻译。规则注入时结合"成人隐语"提示,交由 LLM 判断语境。
代码实现见 `nodes/proper_nouns.py``ADULT_EUPHEMISMS` 表与
`build_proper_noun_rule`