文字符号化検出と言語検出
ちょうどW3Cのwww-international MLで,character encoding detectionとlanguage detectionの話が出ていた.
たとえば,WebのHTMLファイルを処理しようとしても,必ずしもどのような文字符号化なのか,どのような言語なのかが明示されているわけではなく,しかもデフォルトがISO-8859-1であることから,間違って指定されている場合すらある.
このために,対象とするドキュメントの文字符号化を判定してUnicodeに変換し,また書かれている言語を検出して,言語依存の処理をおこなったり,分類に用いるわけである.たとえば,Googleの検索結果を特定の言語に絞り込むことができるのは,language detectionを用いているからである.
ちょうど,Frank Yung-fong Tangが投稿していたので,要旨をまとめてみる.彼はNetscape Navigatorの(確か)4.0から,これに関わっているという経歴を持つ.ちなみに,Netscape Navigatorの初期の版で日本語の文字符号化を誤認識しやすかったのは,前任者の入れたバグであり,それは彼が直してくれたという経緯がある.
昔は限られた対象に対して状態機械を作ったりしていたのだが,現在の実装は統計情報(例,n-gram)を収集して判定する.たとえば,次のような論文を紹介している.
John M. Prager,
Linguini: Language Identification for Multilingual Documents,
Journal of Management Information Systems, Vol. 16, No 3. pp 71-101. Winter 1999-2000.
http://csdl.computer.org/comp/proceedings/hicss/1999/0001/02/00012035.PDF
また,FrankのMozillaの実装をJavaに移植したものは,次から入手できる.
http://www.i18nfaq.com/chardet.html
他に,私は,北研二先生の「確率的言語モデル」も基礎的知識を知る上でよいと思う.
- 作者: 北研二,辻井潤一
- 出版社/メーカー: 東京大学出版会
- 発売日: 1999/11
- メディア: 単行本
- 購入: 10人 クリック: 91回
- この商品を含むブログ (44件) を見る
北研二先生の業績リストには,確率的手法を用いて分類することで,言語の系統樹が得られるという内容の論文もあり,昔私はそれを見て衝撃を受けたことがある.
http://www-a2k.is.tokushima-u.ac.jp/member/kita/papers/index.html
他には,次のようなものがあるようだ.
- Pythonで書かれた3-gramを使った簡単なlanguage detector http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/326576
- Perlで書かれた3-gramを使ったlanguage detector http://www.idlewords.com/2004/11/source_code_for_language_guesser.htm
- Web上のlanguage detection service http://languid.cantbedone.org/
- Basis Technologyの製品 Rosette Language Identifirer http://www.basistech.com/language-identification/
- Alias Technologiesのホームページ.FrankによるとNetscape 6.0から6.1までは,この会社の製品を使っていたらしい. http://www.alis.com/