파이썬용 일한 번역 프로그램

...물론 이 프로그램이 직접 번역하는 건 아니고, 천리안 트랜스위즈를 사용해서 번역을 해 줍니다. -_-; 원래는 HTML 파일을 번역하는 데 써 먹으려고 했던 거라서 거기에 대한 대비가 되어 있습니다. 코드는... 무지 지저분합니다 -_-

code snippet에도 올라 와 있습니다.

"""jktrans.py -- Meta Japanese-Korean translator using Chollian Transwiz
Kang Seonghoon (Tokigun) @ TokigunStudio 2005
Distributable under the GNU LGPL.
"""

import urllib, urllib2, time, re, sys

def translate(s, buf=32768):
    """Translate unicode string s, with buf-byte buffer. Returns UTF-8 string."""
    avoidlist = ('image/', 'images/')
    regexp = re.compile('(?:x-)?(?:shift[-_]?jis|sjis)|euc[-_]?jp|iso-2022-jp|euc[-_]?kr|ks[-_]?c?[-_]?5601(?:.1989)?', re.I)
    def _translate(s):
        _s = s
        s = re.sub(regexp, 'utf-8', s.encode('utf-8'))
        t = str(time.time())
        for x in avoidlist:
            s = s.replace(x, t+x.encode('base64')+t)
        req = urllib2.Request(
            'http://transwiz.chol.com/files1003/exec/experience_text.asp',
            urllib.urlencode(
                {'guid': '{3155F703-DB3B-447a-B5ED-130DC640E263}',
                 'trans_mode1': 'j', 'trans_mode2': 'k', 'trans_message': s}),
            {'Referer': 'http://transwiz.chol.com/files1003/exec/main.asp'})
        try: r = urllib2.urlopen(req).read()
        except urllib2.HTTPError: return _s.encode('utf-8')
        p1 = r.find('>', r.find('<TEXTAREA')) + 1
        p2 = r.find('</TEXTAREA></TEXTAREA></td>', p1)
        s = r[p1:p2]
        for x in avoidlist:
            s = s.replace(t+x.encode('base64')+t, x)
        return s
    
    t = u''; r = ''
    for ss in s.splitlines():
        t += ss + u'\n'
        if len(t) > buf:
            r += _translate(t)
            t = ''
    r += _translate(t)
    return r

def detect_encoding(s):
    """Returns the encoding of given Japanese string."""
    sa = s.decode('shift-jis', 'replace').count(u'\ufffd')
    sb = s.decode('iso-2022-jp', 'replace').count(u'\ufffd')
    sc = s.decode('utf-8', 'replace').count(u'\ufffd')
    if sb > sa < sc: return 'shift-jis'
    elif sc > sb < sa: return 'iso-2022-jp'
    else: return 'utf-8'

if __name__ == '__main__':
    if len(sys.argv) < 3:
        print 'Usage: python %s <infile> <outfile>' % sys.argv[0]
    else:
        contents = file(sys.argv[1], 'rb').read()
        contents = contents.decode(detect_encoding(contents), 'ignore')
        file(sys.argv[2], 'wb').write(translate(contents))

- 토끼군

덤: 이 글을 올린 이후에도 이 프로그램이 정상 작동한다는 보장은 물론 없습니다.