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

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

2008 年 2 月 25 日

R を学ぶ

Filed under: Programming Language — araki @ 10:11 PM

今更という感じもありますが、統計処理用プログラミング言語 R について学んでみました。と言っても、実際にはまずは対話的なインタープリタ、遅延評価といった基礎的なところだけです。感触としては、python に近い感じがしました。

手元の Ubuntu 7.04 でインストールから始めます(R のバージョンは 2.4.1)。

$ sudo apt-get install r-base litter
$ R
> sqrt(exp(2)) * sin(pi / 2)    # 数値計算用の関数などは比較的豊富です。
[1] 2.718282
> x1 <- 4.5                     # 代入がちょっと変わってます。
> x1
[1] 4.5
> 2:7                           # 値の繰り返し
[1] 2 3 4 5 6 7
> (x <- c(4.1, "Hello", TRUE))  # ベクトル
[1] "4.1"   "Hello" "TRUE"
> (A <- matrix(1:4, 2))         # 2行2列の行列
[,1] [,2]
[1,]    1    3
[2,]    2    4
> delayedAssign("tmp", {print("Hello!"); 3})        # 遅延評価
> tmp
[1] "Hello!"
[1] 3
> tmp
[1] 3

今回は時間もないので、このくらいにします。次回はグラフを書いてみようと思います。

参考にした書籍をメモしておきます。

2007 年 10 月 29 日

楽しい Lisp

Filed under: Programming Language — araki @ 12:53 AM

ふとしたきっかけで最近 Common Lisp を勉強し始めました。大学時代に C で Lisp (のごく一部) のインタープリタを書いたことがあり、Lisp の概要は知っていましたが、深く学んでみるとこれが面白いです。最初からプログラミング言語を意図して設計されていない代物なので、言語としての新鮮味が強いのかも知れないです。

Powered by WordPress