diff --git a/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt b/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt index ea8ac62..59cc346 100644 --- a/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt +++ b/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt @@ -2068,6 +2068,14 @@ class MainActivity : AppCompatActivity() { "^\\s*(\\*\\*|__|#+\\s*)?\\s*[「\"“'『]?\\s*(以下是?)?\\s*(翻訳|翻译|訳文|译文|" + "translation|translate)\\s*(结果|結果)?\\s*(如下)?\\s*(\\*\\*|__)?\\s*" + "(は|的|为|:)?\\s*[::—\\-]\\s*[」\"”'』]?\\s*", RegexOption.IGNORE_CASE) + // 开头格式残片(2026-09-16 现场:翻译开头出现 "html>"):Gemma 词表里 + // "" 的尾巴是独立 BPE 词元,模型困惑态冷启动偶尔第一个词元就 + // 落在这类"文档结尾"残留上,后面译文正常、全部质检放行 → 噪声上屏。 + // 保守集合:围栏符/半截标签/模板词元字面/html 尾巴;循环里与标签剥除 + // 交替直至稳定。剥到空 → null 走重试,不外发。 + private val transNoisePrefix = Regex( + "^(`{3,}\\s*[A-Za-z]*>?||\\.?html?>)", + RegexOption.IGNORE_CASE) private fun cleanTrans(raw: String?): String? { if (raw.isNullOrBlank()) return null @@ -2079,6 +2087,12 @@ class MainActivity : AppCompatActivity() { do { prev = s s = transLabelPrefix.replaceFirst(s, "").trim() + val s1 = s + s = transNoisePrefix.replaceFirst(s, "").trim() + if (s != s1) { + Log.i(TAG, "TAP-NOISE stripped: " + + s1.take(16).replace("\n", " ")) + } } while (s != prev && s.isNotEmpty()) if (s.length >= 2 && ((s.startsWith("「") && s.endsWith("」")) || (s.startsWith("\"") && s.endsWith("\"")) ||