일본어 문자를 로마자로 변환하는 pykakasi 모듈의 설치 및 이용에 대해서

일본어 문자를 로마자로 변환하는 pykakasi 모듈의 설치 및 이용에 대해서

2022-10-04 last update

5 minutes reading pykakasi 파이썬 werkzeug Python3 python2.7

하고 싶은 일



pykakasi
일본어 문자를 로마자로 변환 가능

동기 부여



다른 스크립트에서 Flask를 사용하여 파일 업로드하는 것을 쓰고 있습니다.
그 스크립트로 from werkzeug import secure_filename 를 아래와 같이 사용하고 있습니다.
filename = secure_filename(filepath)
이 때, filepathほげ.jpg 등의 일본어인 경우, 일본어 문자가 제거되어 버려, jpg 가 되어 버렸다...
그러면 곤란하기 때문에, 해결안으로서 일본어의 파일명이 있었을 때에, 로마자로 변환하면 좋다고 생각해 조사한 바, pykakasi 라고 하는 모듈로 할 수 있을 것 같았다.

조속히 pip로 인스톨 해 이용하려고 하면, 조금만은 빠졌으므로, 비망도 겸해 기재

pykakasi 설치 및 사용



설치 정보


python + pyenv-virtualenv 환경pip install pykakasi 에서는, 변환용의 사전이 아무래도 발견되지 않고 에러가 되었다.

한자를 로마자로 변환 할 수있는 파이썬 라이브러리 "pykakasi"를 사용해 보았습니다. 의 기사의 코멘트를 참고에 인스톨 하면 문제 없게 해결!
$ pip install git+https://github.com/miurahr/pykakasi

이용에 대해서



python2.7 계통



python2 시스템에서 사용했기 때문에 즉시 사용
# coding: utf-8
from pykakasi import kakasi

kakasi = kakasi()

kakasi.setMode('H', 'a')
kakasi.setMode('K', 'a')
kakasi.setMode('J', 'a')

conv = kakasi.getConverter()

filename = '本日は晴天なり.jpg'

print(conv.do(filename)) # 本日は晴天なり.jpg

에서 print 한 결과 本日は晴天なり.jpg 되었다. 어라?

그리고, 한층 더 조사해 보면, pykakasi 설치 후 변환 할 수 없습니다 mac raspberry pi 로, 캐릭터 라인이 unicode 가 아니면 변환할 수 없다는 것!

그래서 수정하고 시도했다.
#!/usr/bin/env python2
# coding: utf-8
from pykakasi import kakasi

kakasi = kakasi()

kakasi.setMode('H', 'a')
kakasi.setMode('K', 'a')
kakasi.setMode('J', 'a')

conv = kakasi.getConverter()

filename = '本日は晴天なり.jpg'


print(type(filename))

print(conv.do(filename))

print(type(filename.decode('utf-8')))
print(conv.do(filename.decode('utf-8')))

출력 결과
<type 'str'>
本日は晴天なり.jpg
<type 'unicode'>
honjitsuhaseitennari.jpg

오, 할 수 있었다! python2에서는, 문자는 str형과 unicode형이 있어, 특히 아무것도 하지 않으면 str 형이 되어 버리므로, decode 하지 않으면 안 되었다.
라는 것은 __future__ 모듈의 unicode_literals 를 사용하면 decode 하지 않아도 되잖아? 라는 것으로 시험해 보았다.
#!/usr/bin/env python2
# coding: utf-8
from __future__ import division, unicode_literals
from pykakasi import kakasi

kakasi = kakasi()

kakasi.setMode('H', 'a')
kakasi.setMode('K', 'a')
kakasi.setMode('J', 'a')

conv = kakasi.getConverter()

filename = '本日は晴天なり.jpg'


print(type(filename))

print(conv.do(filename)

출력 결과
<type 'unicode'>
honjitsuhaseitennari.jpg

역시. 2 계통 쓸 때는 제대로 __future__ 모듈 사용해야 합니다.

python3 계통



python3에서는, 일본어 문자는 모두 unicode로 다루어지므로, 특히 decode 하지 않아도 되지 않을까 하는 추측의 전 시험해 보았다.
#!/usr/bin/env python3
# coding: utf-8
from pykakasi import kakasi

kakasi = kakasi()

kakasi.setMode('H', 'a')
kakasi.setMode('K', 'a')
kakasi.setMode('J', 'a')

conv = kakasi.getConverter()

filename = '本日は晴天なり.jpg'

print(type(filename))
print(conv.do(filename))

출력 결과
<class 'str'>
honjitsuhaseitennari.jpg

역시!

참고


  • 한자를 로마자로 변환 할 수있는 파이썬 라이브러리 "pykakasi"를 사용해 보았습니다.
  • pykakasi 설치 후 변환 할 수 없습니다 mac raspberry pi