fix: 拼音 fallback 逐字 SinglePinyin,解决词典缺失字对齐失步
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -33,16 +33,16 @@ var PinyinOverrides = map[string]string{
|
||||
"上屋抽梯": "shàng wū chōu tī",
|
||||
"树上开花": "shù shàng kāi huā",
|
||||
"反客为主": "fǎn kè wéi zhǔ",
|
||||
"美人计": "měi rén jì",
|
||||
"空城计": "kōng chéng jì",
|
||||
"反间计": "fǎn jiàn jì",
|
||||
"苦肉计": "kǔ ròu jì",
|
||||
"连环计": "lián huán jì",
|
||||
"美人计": "měi rén jì",
|
||||
"空城计": "kōng chéng jì",
|
||||
"反间计": "fǎn jiàn jì",
|
||||
"苦肉计": "kǔ ròu jì",
|
||||
"连环计": "lián huán jì",
|
||||
"走为上计": "zǒu wéi shàng jì",
|
||||
// 种子内容常用专名(扫描 seed_36_ji/*.json 的人物/场景名补充,发现多音误标就加)
|
||||
"小明": "xiǎo míng",
|
||||
"小虎": "xiǎo hǔ",
|
||||
"朵朵": "duǒ duǒ",
|
||||
"小明": "xiǎo míng",
|
||||
"小虎": "xiǎo hǔ",
|
||||
"朵朵": "duǒ duǒ",
|
||||
"幼儿园": "yòu ér yuán",
|
||||
"足球场": "zú qiú chǎng",
|
||||
"游乐场": "yóu lè chǎng",
|
||||
|
||||
+10
-12
@@ -49,19 +49,17 @@ func AnnotatePinyin(text string) string {
|
||||
}
|
||||
}
|
||||
|
||||
// 未命中汉字逐字转拼音;pi 与 pinyin.Pinyin 的汉字输出顺序同步推进
|
||||
args := pinyin.NewArgs()
|
||||
args.Style = pinyin.Tone
|
||||
all := pinyin.Pinyin(string(runes), args)
|
||||
pi := 0
|
||||
for idx, r := range runes {
|
||||
if !unicode.Is(unicode.Han, r) {
|
||||
continue
|
||||
// 未命中汉字逐字转拼音:词典缺失字(生僻字等)SinglePinyin 返回空串,
|
||||
// 该字自然保持 "",后续字不错位
|
||||
args := pinyin.Args{Style: pinyin.Tone}
|
||||
i := 0
|
||||
for _, r := range text {
|
||||
if out[i] == "" && unicode.Is(unicode.Han, r) {
|
||||
if pys := pinyin.SinglePinyin(r, args); len(pys) > 0 {
|
||||
out[i] = pys[0]
|
||||
}
|
||||
}
|
||||
if out[idx] == "" && pi < len(all) && len(all[pi]) > 0 {
|
||||
out[idx] = all[pi][0]
|
||||
}
|
||||
pi++
|
||||
i++
|
||||
}
|
||||
|
||||
b, _ := json.Marshal(out)
|
||||
|
||||
@@ -59,3 +59,17 @@ func TestAnnotatePinyin_Empty(t *testing.T) {
|
||||
t.Fatal("空文本应返回 []")
|
||||
}
|
||||
}
|
||||
|
||||
func TestAnnotatePinyin_MissingDictRune(t *testing.T) {
|
||||
// 词典缺失字(兙 在 CJK 范围但 go-pinyin 词典未收录)保持空串,后续字不错位
|
||||
pys := parse(t, AnnotatePinyin("兙好"))
|
||||
want := []string{"", "hǎo"}
|
||||
if len(pys) != len(want) {
|
||||
t.Fatalf("长度 %d != %d: %v", len(pys), len(want), pys)
|
||||
}
|
||||
for i := range want {
|
||||
if pys[i] != want[i] {
|
||||
t.Fatalf("第 %d 字 %q != %q", i, pys[i], want[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user