Pythonで少し速くひらがな・カタカナ・半角・全角文字を相互変換する
NLPをやってると文字の正規化処理でひらがな・カタカナ・半角・全角変換することがあります。
そこでPythonでひらがなからカタカナ、カタカナからひらがな、半角文字から全角文字、全角文字から半角文字に高速変換するライブラリjctconvをPyPIにアップしました。
https://pypi.python.org/pypi/jctconv/
そこでjctconvと既存の文字種変換モジュールで比較してみました。
# -*- coding: utf-8 -*- # 他のひらがなカタカナ変換と比較 if __name__ == '__main__': import time loop = 100000 print u'ひらがなからカタカナに変換' text = u'ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ' # jctconv(わたしのスクリプト) import jctconv start = time.clock() for i in xrange(loop): jctconv.hira2kata(text) print '\tjctconv:', print time.clock()-start # http://d.hatena.ne.jp/mohayonao/20101213/1292237816 import mohayonao start = time.clock() for i in xrange(loop): mohayonao.katakana(text) print u'\tmohayonaoさん:', print time.clock()-start # https://github.com/yuka2py/cnvk import cnvk start = time.clock() for i in xrange(loop): cnvk.convert(text, cnvk.HIRA2KATA, cnvk.Z_KATA) print '\tcnvk:', print time.clock()-start # http://pypi.python.org/pypi/jcconv/0.1.6 import jcconv start = time.clock() for i in xrange(loop): jcconv.hira2kata(text) print '\tjcconv:', print time.clock()-start print u'\n半角から全角に変換' text = u'アイウエオあいうえお' # jctconv(わたしのスクリプト) import jctconv start = time.clock() for i in xrange(loop): jctconv.normalize(text,'NFKC') print '\tjctconv:', print time.clock()-start # https://github.com/yuka2py/cnvk import cnvk start = time.clock() for i in xrange(loop): cnvk.convert(text, cnvk.Z_KATA) print '\tcnvk:', print time.clock()-start # http://pypi.python.org/pypi/jcconv/0.1.6 import jcconv start = time.clock() for i in xrange(loop): jcconv.half2kata(text) print '\tjcconv:', print time.clock()-start # http://pypi.python.org/pypi/jcconv/0.1.6 import zenhan start = time.clock() for i in xrange(loop): zenhan.h2z(text) print '\tzenhan:', print time.clock()-start # http://pypi.python.org/pypi/jcconv/0.1.6 import unicodedata start = time.clock() for i in xrange(loop): unicodedata.normalize('NFKC', text) print '\tunicodedata:', print time.clock()-start
MacBook Air2012全部載せ(Intel Core i7 2.0Ghz / DDR3-8GB)で実行
結果
ひらがなからカタカナに変換 jctconv: 5.259766 mohayonaoさん: 8.502345 cnvk: 15.094356 jcconv: 34.587817 半角から全角に変換 jctconv: 0.421827 cnvk: 6.358533 jcconv: 29.451795 zenhan: 1.638667 unicodedata: 0.251975
素のunicodedata以外に勝ったヽ(´ー`)ノ