A library for detecting Chinese (Simplified) syllables that are difficult for Japanese speakers to pronounce.
npm install hard-syllables-analyzer-zh-jp


中国語(簡体字)テキストから、日本語話者にとって発音が難しい中国語の音節を検出するライブラリです。
pinyin-pro を使用した正確な拼音変換| タグ名 | 解説 | 日本語話者が発音しづらい理由 |
| :--- | :--- | :--- |
| RETROFLEX_INITIAL | そり舌音 (zh, ch, sh, r) | 舌先を巻いて発音する動作は日本語にはありません。特に sh と s、zh と z の区別が難しく、カタカナ読みになりやすい音です。 |
| JQX_INITIAL | 舌面音 (j, q, x) | 舌の面を硬口蓋に当てる音です。日本語の「ジ・チ・シ」に似ていますが、舌の使い方が異なり、有気音 (q) と無気音 (j) の使い分けも必要です。 |
| U_UMLAUT_FAMILY | 円唇母音 (ü, v, yu, ju/qu/xu) | 唇を丸めたまま「い」と発音する音です。日本語の「う」は唇を丸めないため、この独特な保持ができず、日本語の「ゆ」や「う」と混同しがちです。 |
| SPECIAL_I | 特殊な i (空韻) | zhi~ri および zi~si の i です。綴りは i ですが「い」とは発音せず、前の子音を引き延ばすような音です。日本人は「い」と発音してしまうミスが多いです。 |
| NG_FINAL | 鼻音 ng (-ng 末尾) | 日本語の「ん」は文脈で音が変わりますが、中国語では n (案内) と ng (案外) を明確に区別します。鼻に抜ける ng の響きを制御するのが日本人には困難です。 |
| ERHUA_OR_ER | 儿化音・er | er や語尾に付く r 音です。音の途中で舌を巻き上げる動作は日本語に全くないため、自然に発音するのが非常に難しい音です。 |
| TONE_SANDHI | 変調 (Tone Sandhi) | 隣接する音節によって声調が変化するルール(3声+3声、一、不など)です。学習者が忘れやすく、不自然な発音になりやすいポイントです。 |
bash
pnpm add hard-syllables-analyzer-zh-jp
`$3
インストールすると hard-zh コマンドが利用可能です。`bash
プロジェクトにインストール済みの場合は pnpm exec
pnpm exec hard-zh "认识中国人"インストールせずに実行する場合は pnpm dlx
pnpm dlx hard-syllables-analyzer-zh-jp "认识中国人"
`#### オプション
-
--help, -h: ヘルプを表示します。
- --include-non-han: 解析結果に漢字以外の文字を含めます。$3
ビルド済みのファイルを直接実行、または tsx を使用してソースコードを直接実行できます。`bash
ビルド済みJSを実行 (pnpm build 後)
pnpm cli "认识中国人"
または
node dist/cli.js "认识中国人"ソースコードを直接実行 (ビルド不要)
npx tsx src/cli.ts "认识中国人"
`$3
`typescript
import { analyzeHardSyllables, formatFindingsTable } from 'hard-syllables-analyzer-zh-jp';const text = "认识中国人。";
const findings = analyzeHardSyllables(text);
console.log(formatFindingsTable(findings));
// 出力例:
// ┌──────────┬──────────────┬──────────┬──────────────────────────────────────────┐
// │ Index │ Char │ Pinyin │ Tags │
// ├──────────┼──────────────┼──────────┼──────────────────────────────────────────┤
// │ 0 │ 认 │ rèn │ RETROFLEX_INITIAL │
// ├──────────┼──────────────┼──────────┼──────────────────────────────────────────┤
// │ 1 │ 识 │ shi │ RETROFLEX_INITIAL, SPECIAL_I │
// ├──────────┼──────────────┼──────────┼──────────────────────────────────────────┤
// │ 2 │ 中 │ zhōng │ RETROFLEX_INITIAL, NG_FINAL │
// ├──────────┼──────────────┼──────────┼──────────────────────────────────────────┤
// │ 4 │ 人 │ rén │ RETROFLEX_INITIAL │
// └──────────┴──────────────┴──────────┴──────────────────────────────────────────┘
`$3
#### analyzeHardSyllables(text: string, options?: AnalyzeOptions): Finding[]
- text: 対象の中国語テキスト
- options.includeNonHan: 解析結果に漢字(Han)以外の文字(記号、英数字、空白など)を含めるかどうか(デフォルト: false)。
- false の場合、難しい音節(DifficultyTagがある文字)のみが結果に含まれます。
- true の場合、入力されたすべての文字がインデックス順に保持されます。####
Finding 型
`typescript
interface Finding {
index: number; // テキスト上の位置
char: string; // 対象の文字
pinyin: string; // 正規化された拼音 (声調あり)
tags: DifficultyTag[]; // 検出されたタグ(重複なし)
}
`開発
- ビルド: pnpm build
- テスト: pnpm test
- Lint/Format: pnpm lint / pnpm format` (Biome 使用)