コードの歴史 ASCII(American Standard Code for Information Interchange) ANSI ISO 646 = 95文字のラテン文字 アルファベット+数字+特殊文字 制御コード: LF, CR などの表示制御と ACK,DEL などの通信制御 、など JISX0201ではASCIIの特殊文字の一部が異なる(¥の使用など)
ISO 646 (ASCII) 文字セット 1 2 3 4 5 6 7 8 9 A B C D E F ! “ # $ % & ‘ ( ) 1 2 3 4 5 6 7 8 9 A B C D E F ! “ # $ % & ‘ ( ) * + , . / : ; < = > ? @ G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~
日本語コードの話 1バイトでは最大256文字 字種の多い言語では多バイトコード 1バイトコードで事足りる欧米言語と多バイトコードが必要なアジアの言語とのバトルグランド 文字コードのような基本的情報インフラの標準化は社会への影響莫大
ISO2022 エスケープシーケンスにより文字を拡張するための各種のメカニズム 各国のISO646 (アメリカならASCII、日本ならJIS X 0201) を別個の文字集合として指定し切り替えて使える。 ちなみに西ヨーロッパの文字では、ISO8859/1
ISO2022 エスケープシーケンス 変化先の文字コード エスケープシーケンス ASCII ESC ( B JIS X0201(ASCII対応部分) ESC ( J JIS カタカナ ESC ( I JIS 0208 ESC $ B
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バイト目、 2バイト目は#x40-EF 最上位ビット=0 JIS X0201(英数字など ASCII対応部分) 最上位ビット=1 JISカタカナ #x81-9F(JIS X 0201では未使用), E0-EF(ISO2022の制御符号部分) 漢字 2バイト目は#x40-EF 合計24576文字 台湾、中国、韓国版として Big5, GBK,UHC
シフトJIS(sjis)の漢字領域のシフト 第2バイト 00 21 40 7E 80 JISコード 00 21 5E 5F 7E 81 9F E0 EF JIS漢字 sjis 第1バイト(アスキーコード) この行き来(1バイト文字と2バイト文字の行き来)は特殊文字列(ISO2022エスケープシーケンス)で行う 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)出現頻度 などによって判断