Jun Araki’s Blog
随所に主となれば立処皆真なり

2009 年 4 月 9 日

Python での日本語文字コード判定

Filed under: Programming Language,Software,Tips — araki @ 12:06 AM

EUC-JP、Shift_JIS、UTF-8 の文字コードが混在したテキストを解析する機会があって、その時にいくつか方法があったのですが、python の pykf と chardet を使って、文字コードを自動判定して全て EUC-JP に統一するというスクリプトを書きました。chardet は短い文字列に弱いらしいので second guess にしました。

# -*- coding: utf-8 -*-

import sys
import pykf
import chardet

def main():
    f = open(sys.argv[1])

    line = f.readline()
    while line:
        code_changed_line = to_euc(line)
        print code_changed_line
        line = f.readline()

    f.close()

def to_euc(text):
    c = pykf.guess(text)
    sc = second_guess(text)

    if c is pykf.EUC:
        return text
    elif c is pykf.UTF8:
        try:
            return unicode(text, 'utf8').encode('euc-jp')
        except:
            return text
    elif c in (pykf.SJIS, pykf.JIS):
        try:
            return unicode(text, 'utf8').encode('euc-jp')
        except:
            return pykf.toeuc(text)
    else:
        return text

def second_guess(text):
    sc = chardet.detect(text)
    return sc

if __name__ == "__main__":
    argc = len(sys.argv)
    if (argc != 2):
        print "Usage: python %s filename" % sys.argv[0]
        sys.exit(1)

    main()

インストールの手順は以下の通りです。手順自体は簡単ですが、pykf についてはダウンロード可能なサイトがいくつかあり、中にはモジュールが足りずにインストールが失敗するもの (例えば、SourceForge.jp 上のものなど) もあったため、少々厄介でした。

$ wget http://archives.sertice.org/devs/linux/cvs/pykf-0.3.4.tgz
$ tar xvfz pykf-0.3.4.tgz
$ cd pykf-0.3.4
$ python setup.py build
$ python setup.py install
$ wget http://chardet.feedparser.org/download/chardet-1.0.1.tgz
$ tar xvfz chardet-1.0.1.tgz
$ cd chardet-1.0.1
$ python setup.py install

参考にさせていただいたサイトをメモしておきます。

Powered by WordPress