Python での日本語文字コード判定
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
参考にさせていただいたサイトをメモしておきます。