LoginSignup
135

More than 5 years have passed since last update.

Pythonで半角・全角の変換を高速に行う

Last updated at Posted at 2014-02-27

Pythonで日本語文字列を高速に半角・全角変換できるライブラリ「mojimoji」を紹介します。

mojimojiは、Pythonでの全角・半角変換を高速に行うことが出来ます。こちらで紹介した方法を使って、内部的にCython及びC++のunordered_mapを用いて変換処理をしており、従来実装よりかなり高速に動作します。

インストール

% pip install mojimoji

概要

mojimojiには、han_to_zenとzen_to_hanの二つのメソッドがあります。また、それぞれkana、digit、asciiというキーワード引数を取り、カタカナ、数字、アルファベットの変換をそれぞれ無効化できます。

全角から半角への変換

>>> import mojimoji
>>> print mojimoji.zen_to_han(u'アイウabc012')
アイウabc012
>>> print mojimoji.zen_to_han(u'アイウabc012', kana=False)
アイウabc012
>>> print mojimoji.zen_to_han(u'アイウabc012', digit=False)
アイウabc012
>>> print mojimoji.zen_to_han(u'アイウabc012', ascii=False)
アイウabc012

半角から全角への変換

>>> import mojimoji
>>> print mojimoji.han_to_zen(u'アイウabc012')
アイウabc012
>>> print mojimoji.han_to_zen(u'アイウabc012', kana=False)
アイウabc012
>>> print mojimoji.han_to_zen(u'アイウabc012', digit=False)
アイウabc012
>>> print mojimoji.han_to_zen(u'アイウabc012', ascii=False)
アイウabc012

パフォーマンス

同じくPythonで半角・全角を変換するライブラリzenhan及びjctconvと動作速度を比較してみます。

% pip install zenhan
% pip install jctconv
% ipython
In [1]: import mojimoji
In [2]: import zenhan
In [3]: import jctconv
In [4]: s = u'アイオエオ012345' * 10
In [5]: %time for n in range(1000000): mojimoji.zen_to_han(s)
CPU times: user 3.90 s, sys: 0.03 s, total: 3.93 s
Wall time: 3.97 s
In [6]: %time for n in range(1000000): zenhan.z2h(s)
CPU times: user 71.05 s, sys: 0.16 s, total: 71.22 s
Wall time: 71.45 s
In [7]: %time for n in range(1000000): jctconv.z2h(s)
CPU times: user 19.75 s, sys: 0.06 s, total: 19.81 s
Wall time: 19.86 s

Pure Pythonで実装されたzenhanライブラリと比較して約18倍、jctconvと比較して約5倍、高速に処理できていることが分かります。

ダウンロード

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
135