日本語コードの話

コードの歴史
• ASCII(American Standard Code for
Information Interchange)  ANSI
• ISO 646 = 95文字のラテン文字
• アルファベット+数字+特殊文字
• 制御コード: LF, CR などの表示制御と
ACK,DEL などの通信制御 、など
• JISX0201ではASCIIの特殊文字の一部が
異なる(¥の使用など)
ISO 646 (ASCII) 文字セット
0 1 2 3 4 5 6 7 8 9 A B C D E F
2
! “ #$% & ‘ ( ) * + ,
3 0 1 2 3 4 5 6 7 8 9 :
;
.
/
< = > ?
4 @A B C D E F G H I J K L M N O
5 P Q R S T U V WX Y Z [ \
] ^ _
6 ` a b c d e f g h i
m n o
7 p q r s t
j
k l
u v w x y z { |
} ~
日本語コードの話
• 1バイトでは最大256文字
• 字種の多い言語では多バイトコード
• 1バイトコードで事足りる欧米言語と多バイ
トコードが必要なアジアの言語とのバトル
グランド
• 文字コードのような基本的情報インフラの
標準化は社会への影響莫大
ISO2022
• エスケープシーケンスにより文字を拡張す
るための各種のメカニズム
• 各国のISO646 (アメリカならASCII、日本
ならJIS X 0201) を別個の文字集合として
指定し切り替えて使える。
• ちなみに西ヨーロッパの文字では、
ISO8859/1
ISO2022 エスケープシーケンス
変化先の文字コード
エスケープシーケンス
ASCII
ESC ( B
JIS X0201(ASCII対応
部分)
JIS カタカナ
ESC ( J
JIS 0208
ESC $ B
ESC ( I
JISコードの歴史
• JISX0208(1978) 当時はJISC6226
カタカナ(いわゆる半角カタカナ)および全
角英字はいまや無用の長物ないしは有害
• 半角カタカナと全角英字は97JISでは使わ
ないことに決めた
• シフトJIS
• 78JIS  83JIS  90JIS  97JIS
内部状態を持つ文字コードと
持たない文字コード
• 1バイトコードのASCIIは内部状態なし
• 2バイトの内部状態なしコードを目指した
のがユニコード
• エスケープシーケンスのある文字コード
ISO2022 に則るコードは内部状態を持つ。
• 内部状態を持つと何がまずいのか?
JISコードにおける漢字
• 78JISの第1水準 2965文字=都道府県
名、市町村名を全て記述できる。
第2水準 3384文字
• JISX 0212 の補助漢字 5801文字
日本語EUC
• Unixで常用される2バイトコード
– 第1バイト最上位ビット=0  JIS X0201(ASCII対応
部分)
– 第1バイト最上位ビット=1 かつ第2バイト最上位ビッ
ト=1  JIS漢字
– 第1バイト=8E かつ第2バイト最上位ビット=1  JIS
カタカナ
– 第1バイト=8E かつ第2バイト最上位ビット=1かつ第
3バイト最上位ビット=1  JIS補助漢字
• 上位ビットを見るだけで字種を判別できる
シフトJIS
• JISX0208で使用していない文字を漢字の1バ
イト目に使う。すなわち、
• 1バイト目、
– 最上位ビット=0 JIS X0201(英数字など ASCII対応
部分)
– 最上位ビット=1 JISカタカナ
– #x81-9F(JIS X 0201では未使用), E0-EF(ISO2022の
制御符号部分) 漢字
• 2バイト目は#x40-EF
• 合計24576文字
• 台湾、中国、韓国版として Big5, GBK,UHC
第2バイト
00
第
1
バ
イ
ト
(
ア
ス
キ
ー
コ
ー
ド
)
00
21
40
JISコード
7E 80
この行き来(1バイト文
字と2バイト文字の行
き来)は特殊文字列
(ISO2022エスケープ
シーケンス)で行う
21
5E
JIS漢字
5F
JIS漢字
7E
81
sjis
sjis sjis
sjis
sjis sjis
9F
E0
EF
JISカタカナ
JIS X0201 ここは1バイト文字
シフトJIS(sjis)の漢字領域のシフト
SJISコード
漢字の形
• 「包摂」 とは 異なる字形を同一視の基準
のこと。 例えば、「高」や「富」や「国」のふ
たつの字形など
• そもそも字形のぶれをきちんと定義できる
のか?
• 計算機技術によって解決できる種類の問
題?
文字と文字コードと字形の関係
文字
文字と字形の
関係は複雑怪奇
「島」「嶋」
目的に応じて決める
字形
字形のゆれ
 包摂基準で規定
文字コード
情報検索という目的だとどうなるか
• 人名を検索したいなら「嶋」と「島」は別の
文字コードにしておくべき
• A と a が同じ文字コードでは困ることも
あるので別のコードに
• 字形が増えると文字コードが増える。検索
ではいくつかの文字コードを同一視するよ
うなプログラムを書く
用字系と使用言語の関係
• 「どの言語で書かれたテキストか」と「どの
用字系が使われているか」を区別すること
も多言語処理では重要
• 同じ字と思しき字でも使われる用字系が違
うと異なるコードが割り振られるべき。
• ユニコードのCJK(日中韓統一漢字コー
ド)は、3ヶ国語の漢字を字形が似ていると
いう理由で同じコードに割り当てている。
左右 縦横
• 文を 右から左に書くか、 左から右に書く
か
• 文を縦書きするか、横書きするか
• このような問題は文字コードの問題か、言
語の問題か、用字系の問題か
•  平文(plain text) vs 構造化文書
Plain Text vs 構造化文書
• Plain text は単なる文字コードの連なり。表
示や論理的構造を持たない。
• ネットワークエチケットのひとつにメールは
Plain text で書くということがある。
• 構造化文書はタグによって、文書の論理
構造や表示の指示、あるいは使用言語な
どまで指定したもの。 LaTex,SGML、
XML、HTMLなど
自動文字コード認識
• ISO2022のエスケープシーケンスを探す
• JIS、SJIS、EUCなどを仮定して復元。日本
語らしい言語統計になるのが正しい文字
コード
• 言語統計とは?
• 文字の頻度統計、N-gram統計、単語の頻
度
文字コード変換ツール(UNIX)
• nkf -変換先コード ファイル名
• 変換先コードは j、s、e、m
便利な情報リソース
• 情報通信辞典:http://www.e-words.ne.jp/
使用言語の推定
• あるテキストの文字コードが分かると次は
そのテキストが記述されている言語を推定
• 使用言語推定
–
–
–
–
言語特有の文字コード、文字列パタン、
言語固有の文字出現頻度、
言語固有の文字列 (n-gram)出現頻度
などによって判断