基本編の用語説明 その2 日本語入力

基本編の用語説明 その2
エディタと日本語入力
エディタ
エディタ(editor):文書を作成、編集するアプリ
ケーションソフトウェア
教育用計算機システムのエディタは、
テキストエディット
基本的な編集方法はここ
 カーソル:文字が入力される位置を表している目印
 カッペ、コピペ
 検索と置換
 編集結果の保存
 文系のみなさんには興味はないだろうがemacsというエディタも
ある
さて、いよいよ日本語入力だが。。。
 文字コード:
コンピュータの内部 対応画面やキーボードで見える文字
(2進数で表現)
文字コード
(人間に読める:フォント)
 フォント:画面にみえる字の形
 Unicode: 世界の主な文字を文字集合として 16ビットの文字
コード詳しくはここ
 アスキーコード:7ビットで英数字を表す文字コード
 ビット:2進数1桁のこと。計算機で情報を表す最小単位
 漢字コード:漢字は8ビットでは表現できないので、16ビット以
上使うコードになる
 ShiftJIS(SJIS), EUC, JISなどが混在。
 これらのコードが混在した状態でいったいどうやって文字コードを認識
するのだろうか?
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
;
7 p q r s t
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
.
j
\
k l
u v w x y z { |
]
^ _
m n o
} ~
第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コード
• MacOSでの日本語入力はここ
• 全角と半角
– 半角カタカナや全角英文字は避けましょう。
ここから先は難しいので、根性の無い人は、こ
れ以上進んではいけません:
•
•
•
•
•
コードの歴史
ASCII(American Standard Code for
Information Interchange)  ANSI
ISO 646 = 95文字のラテン文字
アルファベット+数字+特殊文字
制御コード: LF, CR などの表示制御と
ACK,DEL などの通信制御 、など
JISX0201ではASCIIの特殊文字の一部が異
なる(¥の使用など)
日本語コードの話
• 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バイト目、
– 最上位ビット=0 JIS X0201(英数字など ASCII対
応部分)
– 最上位ビット=1 JISカタカナ
– #x81-9F(JIS X 0201では未使用), E0-EF(ISO2022
の制御符号部分) 漢字
• 2バイト目は#x40-EF
• 合計24576文字
• 台湾、中国、韓国版として Big5, GBK,UHC
第2バイト
00
00
21
第 21
1 5E
バ
イ 5F
ト
40
7E 80
JIS漢字
JIS漢字
7E
81
9F
E0
EF
JISカタカナ
JIS X0201
シフトJISの漢字領域のシフト
漢字の形
• 「包摂」 とは 異なる字形を同一視の基準の
こと。 例えば、「高」や「富」や「国」のふたつ
の字形など
• そもそも字形のぶれをきちんと定義できるの
か?
• 計算機技術によって解決できる種類の問
題?
文字と文字コードと字形の関係
文字
文字と字形の
関係は複雑怪奇
「島」「嶋」
目的に応じて決める
字形
字形のゆれ
 包摂基準で規定
文字コード
情報検索という目的だとどうなるか
• 人名を検索したいなら「嶋」と「島」は別の文
字コードにしておくべき
• 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)出現頻度
– などによって判断