36
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

日本語文字をローマ字に変換するpykakasiモジュールのインストールと利用について

Last updated at Posted at 2017-11-05

やりたいこと

pykakasiを利用して、
日本語文字をローマ字に変換できるようにする

モチベーション

別のスクリプトでFlaskを用いてファイルアップロードするものを書いているんですが、
そのスクリプトでfrom werkzeug import secure_filename を下記のように使っています。

filename = secure_filename(filepath)

このとき、filepathほげ.jpgなどの日本語の場合、日本語の文字が除去されてしまって、jpgになってしまった...
それでは困るので、解決案として日本語のファイル名があったときに、ローマ字に変換すればよいのではと思い調査したところ、pykakasiというモジュールでできそうだった。

早速pipでインストールして利用しようとすると、少しだけはまったので、備忘も兼ねて記載

pykakasiのインストールと利用

インストールについて

python + pyenv-virtualenvの環境
pip install pykakasiでは、変換用の辞書がどうやら見つからずエラーになった。

漢字をローマ字に変換できるPythonライブラリ "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

やっぱり!

参考

36
34
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?