From fe8e17922cd52423d09da8f188c6a09be5cbcce4 Mon Sep 17 00:00:00 2001 From: Weng Xuetian Date: Mon, 13 Jul 2026 21:23:24 -0700 Subject: [PATCH] Update inner segment handling for "n" segment --- src/libime/pinyin/pinyinencoder.cpp | 17 +++++++---------- test/testpinyinencoder.cpp | 6 ++++++ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/libime/pinyin/pinyinencoder.cpp b/src/libime/pinyin/pinyinencoder.cpp index 1aea1bd..7e5572c 100644 --- a/src/libime/pinyin/pinyinencoder.cpp +++ b/src/libime/pinyin/pinyinencoder.cpp @@ -322,18 +322,15 @@ PinyinEncoder::parseUserPinyin(std::string userPinyin, auto iter = innerSegments.find(nextPinyin); if (iter != innerSegments.end()) { for (const auto &innerSeg : iter->second) { - if (innerSeg.second == "n") { - bool accept = - (top + nextSize[i] < pinyin.size()) || - (i == 0 && nNextSize == 1); - if (!accept) { - continue; - } - } result.addNext(top, top + innerSeg.first.size()); - result.addNext(top + innerSeg.first.size(), - top + nextSize[i]); + // Skip "n", in case n can have a better match. + if (innerSeg.second == "n") { + q.push(top + innerSeg.first.size()); + } else { + result.addNext(top + innerSeg.first.size(), + top + nextSize[i]); + } } } } else if (nextPinyin.size() == 2 && diff --git a/test/testpinyinencoder.cpp b/test/testpinyinencoder.cpp index cda1b52..d720f2b 100644 --- a/test/testpinyinencoder.cpp +++ b/test/testpinyinencoder.cpp @@ -291,6 +291,12 @@ int main() { graph = PinyinEncoder::parseUserPinyin("to", &profile, PinyinFuzzyFlag::InnerShort); dfs(graph, {"t", "o"}); + graph = PinyinEncoder::parseUserPinyin( + "xiana", &profile, + {PinyinFuzzyFlag::PartialFinal, PinyinFuzzyFlag::InnerShort}); + dfs(graph, {"xian", "a"}); + dfs(graph, {"xia", "na"}); + dfs(graph, {"xi", "a", "na"}); } {