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以外に勝ったヽ(´ー`)ノ