Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

文字種分類

Litsea の各言語は、個々の文字を言語学的に意味のあるカテゴリに分類する文字種クラスのセットを定義します。これらの種別コードは AdaBoost 分類器の特徴量として使用されます。

仕組み

Language::char_type(c: char) -> &'static str は、Unicode 文字範囲に対する match 式で文字を直接分類します(正規表現・アロケーションなし)。matchアームは上から順に評価され、最初にマッチしたアームが種別コードを決定します。どのアームにもマッチしない場合、その文字は "O"(Other)に分類されます。

言語ごとに数値の type id を返す分類関数(japanese_char_type_idchinese_char_type_idkorean_char_type_id)があり、char_type は返された id に対するテーブル参照であるため、文字列コードと数値 id は構造上ずれることがありません。全言語で共通のクラス "P"(句読点)・"A"(ラテン文字)・"N"(数字)は、言語固有クラスの後に評価される共有ヘルパー punct_latin_digit() にまとめられています。単純な範囲を超えるロジックはアーム本体内の追加コードで表現します(例: 韓国語のハングル音節構造に対するコードポイント判定)。

日本語の文字種

Code名称パターン / 範囲
M漢数字[一二三四五六七八九十百千万億兆]一, 千, 億
H漢字 / CJK 統合漢字U+4E00–U+9FFF, plus 々〆ヵヶ漢, 字, 学
Iひらがな[ぁ-ん]あ, い, う
Kカタカナ[ァ-ヴーア-ン゙゚]ア, カ, ー
P句読点CJK 記号(U+3000-303F)、全角(U+FF01-FF65)。, 、, 「
AASCII / ラテン文字[a-zA-Za-zA-Z]A, z, B
N数字[0-90-9]0, 5
Oその他フォールバック@, #

注意: “M”(漢数字)は “H”(一般漢字)よりも先にチェックされるため、一や百などの文字は一般的な漢字ではなく数字として分類されます。

中国語の文字種

Code名称パターン / 範囲
F機能語高頻度の文法語的, 了, 在, 是
CCJK 統合漢字U+4E00–U+9FFF中, 国, 人
XCJK 拡張 AU+3400–U+4DBF希少な文字
RCJK 部首U+2E80–U+2FDF康熙部首
P句読点CJK 記号 + 全角。, ,, 《
B注音符号U+3100–U+312F, U+31A0–U+31BF注音記号
AASCII / ラテン文字[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+9FFFCJK 統合漢字
P句読点CJK 記号 + 全角。, ,
AASCII / ラテン文字[a-zA-Za-zA-Z]A, z
N数字[0-90-9]0, 5
Oその他フォールバック@, #

韓国語ハングル音節の検出

韓国語では SN と SF の種別にコードポイント判定付きの範囲アームを使用します。これは Unicode の体系的なハングルエンコーディングを活用しています:

  • ハングル音節は U+AC00–U+D7AF を占有
  • 各音節は (初声 * 21 + 中声) * 28 + 終声 + 0xAC00 としてエンコード
  • (codepoint - 0xAC00) % 28 == 0 の場合、音節に終声がない(SN)
  • それ以外の場合、終声がある(SF、「받침」)

この区別は、終声(パッチム/받침)の有無が韓国語の単語境界パターンと助詞の接続に影響するため重要です。

英語の文字種

Code名称パターン / 範囲
U大文字ラテン文字[A-ZA-Z]A, Z, T
W空白スペース、タブ、U+00A0 , \t
QアポストロフィU+0027, U+2019',
P句読点ASCII(アポストロフィを除く)+ 一般句読点 + CJK/全角., -, @,
A小文字ラテン文字[a-za-z]a, z
N数字[0-90-9]0, 5
Oその他フォールバック字, é

他の 3 言語と異なり、英語では ASCII の句読点(アポストロフィを除く)を "O" のままにせず "P" に分類します – これは英語固有の意図的な違いです (char_type('@') は他言語では "O" ですが、英語では "P" になります)。 アポストロフィは独立した種別("Q")として切り出されています。これは 短縮形(do + n't)や所有格(Google + 's)を示す文字レベルの マーカーだからです。また大文字には専用の種別("U")が割り当てられて います。これは文頭や固有名詞の境界と相関があるためです。ハイフンが 8 番目の種別を新設せずに "P" のままである理由を含む詳しい根拠は English を参照してください。

言語間の比較

FeatureJapaneseChineseKoreanEnglish
種別の総数89107
固有の種別M, H, I, KF, C, X, R, BE, SN, SF, J, GU, W, Q
共有する種別P, A, N, OP, A, N, OP, A, N, O(H は日本語と共通)P, A, N, O(P は ASCII 句読点全体に拡張)
マッチング方法範囲match範囲match範囲match + コードポイント判定範囲match
WC 特徴量の使用ありありなしなし