文字種分類
Litsea の各言語は、個々の文字を言語学的に意味のあるカテゴリに分類する文字種クラスのセットを定義します。これらの種別コードは AdaBoost 分類器の特徴量として使用されます。
仕組み
Language::char_type(c: char) -> &'static str は、Unicode 文字範囲に対する match 式で文字を直接分類します(正規表現・アロケーションなし)。matchアームは上から順に評価され、最初にマッチしたアームが種別コードを決定します。どのアームにもマッチしない場合、その文字は "O"(Other)に分類されます。
言語ごとに分類関数(japanese_char_type・chinese_char_type・korean_char_type)があり、全言語で共通のクラス "P"(句読点)・"A"(ラテン文字)・"N"(数字)は、言語固有クラスの後に評価される共有ヘルパー punct_latin_digit() にまとめられています。単純な範囲を超えるロジックはmatchガードで表現します(例: 韓国語のハングル音節構造)。
日本語の文字種
| Code | 名称 | パターン / 範囲 | 例 |
|---|---|---|---|
| M | 漢数字 | [一二三四五六七八九十百千万億兆] | 一, 千, 億 |
| H | 漢字 / CJK 統合漢字 | [一-龠々〆ヵヶ] | 漢, 字, 学 |
| I | ひらがな | [ぁ-ん] | あ, い, う |
| K | カタカナ | [ァ-ヴーア-ン゙゚] | ア, カ, ー |
| P | 句読点 | CJK 記号(U+3000-303F)、全角(U+FF01-FF65) | 。, 、, 「 |
| A | ASCII / ラテン文字 | [a-zA-Za-zA-Z] | A, z, B |
| N | 数字 | [0-90-9] | 0, 5 |
| O | その他 | フォールバック | @, # |
注意: “M”(漢数字)は “H”(一般漢字)よりも先にチェックされるため、一や百などの文字は一般的な漢字ではなく数字として分類されます。
中国語の文字種
| Code | 名称 | パターン / 範囲 | 例 |
|---|---|---|---|
| F | 機能語 | 高頻度の文法語 | 的, 了, 在, 是 |
| C | CJK 統合漢字 | U+4E00–U+9FFF | 中, 国, 人 |
| X | CJK 拡張 A | U+3400–U+4DBF | 希少な文字 |
| R | CJK 部首 | U+2E80–U+2FDF | 康熙部首 |
| P | 句読点 | CJK 記号 + 全角 | 。, ,, 《 |
| B | 注音符号 | U+3100–U+312F, U+31A0–U+31BF | 注音記号 |
| A | ASCII / ラテン文字 | [a-zA-Za-zA-Z] | A, z |
| N | 数字 | [0-90-9] | 0, 5 |
| O | その他 | フォールバック | @, # |
中国語の機能語には以下が含まれます:
- 構造助詞: 的, 地, 得
- アスペクト / モーダル助詞: 了, 着, 过, 吗, 呢, 吧, 啊, 嘛
- 接続詞: 和, 与, 或, 但, 而, 且, 及
- 前置詞: 在, 从, 到, 把, 被, 对, 向, 给
- よく使われる文法動詞 / 副詞: 是, 有, 不, 也, 都, 就, 要, 会, 能, 可
韓国語の文字種
| Code | 名称 | パターン / 範囲 | 例 |
|---|---|---|---|
| E | 助詞 / 語尾 | 高頻度の文法助詞 | 은, 는, 을, 를, 의, 에 |
| SN | ハングル(パッチムなし) | 終声のないハングル音節 | 가, 나, 하 |
| SF | ハングル(パッチムあり) | 終声のあるハングル音節 | 한, 글, 각 |
| J | ハングル字母 | U+1100–U+11FF | 個別の子音 / 母音 |
| G | 互換字母 | U+3130–U+318F | ㄱ, ㅏ, ㅎ |
| H | 漢字 | U+4E00–U+9FFF | CJK 統合漢字 |
| P | 句読点 | CJK 記号 + 全角 | 。, , |
| A | ASCII / ラテン文字 | [a-zA-Za-zA-Z] | A, z |
| N | 数字 | [0-90-9] | 0, 5 |
| O | その他 | フォールバック | @, # |
韓国語ハングル音節の検出
韓国語では SN と SF の種別にmatchガードを使用します。これは Unicode の体系的なハングルエンコーディングを活用しています:
- ハングル音節は U+AC00–U+D7AF を占有
- 各音節は
(初声 * 21 + 中声) * 28 + 終声 + 0xAC00としてエンコード (codepoint - 0xAC00) % 28 == 0の場合、音節に終声がない(SN)- それ以外の場合、終声がある(SF、「받침」)
この区別は、終声(パッチム/받침)の有無が韓国語の単語境界パターンと助詞の接続に影響するため重要です。
言語間の比較
| Feature | Japanese | Chinese | Korean |
|---|---|---|---|
| 種別の総数 | 8 | 9 | 10 |
| 固有の種別 | M, H, I, K | F, C, X, R, B | E, SN, SF, J, G |
| 共有する種別 | P, A, N, O | P, A, N, O | P, A, N, O(H は日本語と共通) |
| マッチング方法 | 範囲match | 範囲match | 範囲match + ガード |
| WC 特徴量の使用 | あり | あり | なし |