2012年01月17日

【Unicode】PythonでのUnicode下での半角カナと全角かな変換(2)

 2010年05月05日記載の「【Unicode】PythonでのUnicode下での半角カナと全角かな変換」で公開したコードに対し、先日以下の様なコメントを頂いた。

こんにちは。

実際に使わせていただいたものです。お世話になってます。
u'ケ':u'お'
u'ケ' :u'お'
u'お' :u'ケ'←こんな感じで、ケのところが おに変わってしまったりするので、修正された方がいいかと思い、コメントいたしました。
Posted by 通りすがり at 2012年01月05日 19:48


 取り敢えず、ご指摘頂いたところに修正を加えさせて頂いた次第だが、修正後のコードを実行して試みるとエラーが出るのでさらに手直しをして行くと、作成当時の状況を少しずつ思い出したところだ。コードとしては、自己の一つの需要に応える為に作ったものを元に簡単にPythonで半角全角の文字置替えるコーディング方法を提示しておこうとの思いで掲載した程度のもので即座に完成形を提供しようと迄の思いのものではなかった。
 でも、そんな姿勢はオープンソースの視点で言うと互いにソースを公開することで誰かが作ってみんなが自由に活用するというメリットを軽視したものであったと今回改めて反省した次第だ。
 と言うことで、今回、いい加減な状態で中断していた同コードを読み易く見直し、ちゃんと動作する様にすると共に、変換モードを追加させて頂き、ここに公開することにさせて頂いた。

 ただ、残念ながら以前のコードは成り行きで出来上がったものであって、変数や処理記載の順番もいい加減、カプセル化の為のmode名も頭での整理が不充分な内での命名だった為、今回のコードでは改めて命名規則を決めた上で全面的に見直させて頂いた。結果として以前のモード値と今回公開のコード上のモード値に互換が無くなってしまった。もし以前のコードを修正して利用しているものについては、そのまま利用頂き、今回のコードについては新規利用分より活用頂くことを推奨させて頂くことにする。しかし、既に利用中のものを今回のコードに置き替えたいなら次のリストに従いmode値を置き替えると良いだろう。但し、7〜10は新設のモードでありJISコードにあるascii文字と重複する全角の英数記号を変換対象に加えたものである。関数名からするとカテゴリ外の機能を追加したので関数名も zen_conv() に改称させて頂いた。

0.半角カタカナを全角ひらがなへ hira → han2hira
1.全角カタカナを全角ひらがなへ zkata2hira → kata2hira
2.全角ひらがなを全角カタカナへ zhira2kata → hira2kata
3.全角ひらがなを半角カナへ zhira2han → hira2han
4.全角カタカナを半角カナへ zkana2han → kata2han
5.全角平片カナを半角カナへ zkana2han → kana2han
6.半角カタカナを全角カタカナへ (既定値) → han2kata(既定値)
7.全角ひらがな+全角カタカナ+全角英数記号を半角へ → zen2han
8.半角ひらがな+全角カタカナ+全角英数記号を全角へ → han2zen
9.半角英数記号を全角へ → asc2zen
10.全角英数記号を半角へ → zen2asc


 尚、以前のコードについては一部機能していないモードがあるが、今回はその点も新たなモード名で全て機能する様にしたつもりだ。ただ作成にあたってはパターンでコピペして作製しているので不具合を抱えがちである。そこで不充分ながらも文字列testに対し全モードをテストする関数を附記している。実行結果は次の通りだが、これだけで総てのチェックが出来る訳でもないので何か不具合があれば、ご指摘頂けるととても有難い。





[mire@localhost ~]$ python jpcode.py

######################################################################
# 1. reverse(s) : Unicode文字列用の降順並替
# 2. sort(s) : Unicode文字列用の昇順並替
# 3. zen_conv( s : 文字列s内の半角/全角カナASCII文字の変換
# , mode : 'han2hira' = 0.半角カタカナを全角ひらがなへ
# : 'kata2hira' = 1.全角カタカナを全角ひらがなへ
# : 'hira2kata' = 2.全角ひらがなを全角カタカナへ
# : 'hira2han' = 3.全角ひらがなを半角カナへ
# : 'kata2han' = 4.全角カタカナを半角カナへ
# : 'kana2han' = 5.全角平片カナを半角カナへ
# : 'han2kata' = 6.半角カタカナを全角カタカナへ(既定値)
# : 'zen2han' = 7.全角カタカナ+ひらがな+英数記号を半角へ
# : 'han2zen' = 8.半角カタカナ+全角英数記号を全角へ
# : 'asc2zen' = 9.半角英数記号を全角へ
# : 'zen2asc' =10.全角英数記号を半角へ
# , yen : 「\」を「¥」(既定値)以外で変換したい文字列を指定
# , alt_dic : 変換辞書へmap修正追加するものを辞書で指定
# , del_list: 変換辞書から除去する文字をlistで指定
# , my_dic : 固有の変換辞書を指定
# , debug) : 固有の変換辞書を指定
# modeの命名規則 : 全角ひらがな=hira, 全角カタカナ=kata, 半角=han, 全角=zen
# : ' to '='2', 半角英数記号(ascii)=asc
#  全て変換用辞書に依存し変換する仕組み。濁点・半濁点の判別の為、逆順の
# 文字列を使って処理後、再度逆順にする手法を用いている。
#【更新履歴】
# 2010-05-05 0.0.0  kana2zen()として半角カナを全角のカタカナひらがなへの
# 変換機能及び、そのテストコードを公開
# 2010-05-06 0.0.1  半角への逆変換が欲しくなったので機能拡張し、kana_conv()
# としたdebug時に参照辞書の一部を確認可能にし、指定ミスを
# 発見し易くした長音記号等漏れ等の誤りを補正。多分精度的には
# まだα1クラス。
# 2012-01-13 0.0.1a  通りすがりさんご指摘の'け''ケ'のマッピングミスを修正
# 2012-01-14 0.0.2  この__DOC__のmode名hiraをhan2hiraに変更、その他も改変
# ※0.0.1a以前と非互換。今後は新命名規則でmode名を決定
# 2012-01-15 0.1.0  全角英数記号文字の半角変換をzen2han、その逆をhan2zen
# として追加半角英数記号の全角変換をasc2zen、その逆をzen2asc
# として追加し、関数名をzen_conv()に変更
# 2012-01-16 0.1.0a  引数 yen, alt_dic, del_list, my_dic を追加し個別用途の
# 変換需要に応える様に拡張開始
#
#【判っている課題】
# 2012-01-17 alt_dicで追加したものに濁点半濁点がうまく処理出来ない場合がある。
# my_dic 利用の成否は未確認。

orignal text
testに次の様に文字列を代入し
>>> test=u"""
全角片仮名:アイウエオ、パピュプョペェポォ
全角平仮名:あいうえお、半角片仮名アイウエオ、
濁点平仮名:がぎくげご、濁点半角片仮名ガギグゲゴ
半濁平仮名:ぱぴぷぺぼ、半濁半角片仮名パピプペポ
濁点重複:バ゙ビ゙
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%¥
半角英数記号: 012,abc,ABC,#$%\
"""

0.半角カタカナを全角ひらがなへの変換は
>>> zen_conv(test, mode='han2hira', debug=1)
カ ⇒ か ガ ⇒ が キ ⇒ き ギ ⇒ ぎ ク ⇒ く グ ⇒ ぐ ケ ⇒ け ゲ ⇒ げ コ ⇒ こ ゴ ⇒ ご

全角片仮名:アイウエオ、パピュプョペェポォ
全角平仮名:あいうえお、半角片仮名あいうえお、
濁点平仮名:がぎくげご、濁点半角片仮名がぎぐげご
半濁平仮名:ぱぴぷぺぼ、半濁半角片仮名ぱぴぷぺぽ
濁点重複:ば゛び゛
ヴィー、う゛ぃー
全角英数記号: 012,abc,ABC,#$%¥
半角英数記号: 012,abc,ABC,#$%\


1.全角カタカナを全角ひらがなへの変換は
>>> zen_conv(test, mode='kata2hira', debug=1)
コ ⇒ こ ゴ ⇒ ご サ ⇒ さ ザ ⇒ ざ シ ⇒ し ジ ⇒ じ ス ⇒ す ズ ⇒ ず セ ⇒ せ ゼ ⇒ ぜ

全角片仮名:あいうえお、ぱぴゅぷょぺぇぽぉ
全角平仮名:あいうえお、半角片仮名アイウエオ、
濁点平仮名:がぎくげご、濁点半角片仮名ガギグゲゴ
半濁平仮名:ぱぴぷぺぼ、半濁半角片仮名パピプペポ
濁点重複:バ゙ビ゙
う゛ぃー、ヴィー
全角英数記号: 012,abc,ABC,#$%¥
半角英数記号: 012,abc,ABC,#$%\


2.全角ひらがなを全角カタカナへの変換は
>>> zen_conv(test, mode='hira2kata', debug=1)
ご ⇒ ゴ さ ⇒ サ ざ ⇒ ザ し ⇒ シ じ ⇒ ジ す ⇒ ス ず ⇒ ズ せ ⇒ セ ぜ ⇒ ゼ そ ⇒ ソ

全角片仮名:アイウエオ、パピュプョペェポォ
全角平仮名:アイウエオ、半角片仮名アイウエオ、
濁点平仮名:ガギクゲゴ、濁点半角片仮名ガギグゲゴ
半濁平仮名:パピプペボ、半濁半角片仮名パピプペポ
濁点重複:バ゙ビ゙
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%¥
半角英数記号: 012,abc,ABC,#$%\


3.全角ひらがなを半角カナへの変換は
>>> zen_conv(test, mode='hira2han', debug=1)
け ⇒ ケ げ ⇒ ゲ こ ⇒ コ ご ⇒ ゴ さ ⇒ サ ざ ⇒ ザ し ⇒ シ じ ⇒ ジ す ⇒ ス ず ⇒ ズ

全角片仮名:アイウエオ、パピュプョペェポォ
全角平仮名:アイウエオ、半角片仮名アイウエオ、
濁点平仮名:ガギクゲゴ、濁点半角片仮名ガギグゲゴ
半濁平仮名:パピプペボ、半濁半角片仮名パピプペポ
濁点重複:バ゙ビ゙
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%¥
半角英数記号: 012,abc,ABC,#$%\


4.全角カタカナを半角カナへの変換は
>>> zen_conv(test, mode='kata2han', debug=1)
ク ⇒ ク グ ⇒ グ ケ ⇒ ケ ゲ ⇒ ゲ コ ⇒ コ ゴ ⇒ ゴ サ ⇒ サ ザ ⇒ ザ シ ⇒ シ ジ ⇒ ジ

全角片仮名:アイウエケ、バピュプョペェポォ
全角平仮名:あいうえお、半角片仮名アイウエオ、
濁点平仮名:がぎくげご、濁点半角片仮名ガギグゲゴ
半濁平仮名:ぱぴぷぺぼ、半濁半角片仮名パピプペポ
濁点重複:バ゙ビ゙
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%¥
半角英数記号: 012,abc,ABC,#$%\


5.全角かなを半角カナへの変換は
>>> zen_conv(test, mode='kana2han', debug=1)
け ⇒ ケ げ ⇒ ゲ こ ⇒ コ ご ⇒ ゴ さ ⇒ サ ざ ⇒ ザ し ⇒ シ じ ⇒ ジ す ⇒ ス ず ⇒ ズ

全角片仮名:アイウエケ、バピュプョペェポォ
全角平仮名:アイウエオ、半角片仮名アイウエオ、
濁点平仮名:ガギクゲゴ、濁点半角片仮名ガギグゲゴ
半濁平仮名:パピプペボ、半濁半角片仮名パピプペポ
濁点重複:バ゙ビ゙
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%¥
半角英数記号: 012,abc,ABC,#$%\


6.半角カナを全角カタカナへの変換は
>>> zen_conv(test, mode='han2kata', debug=1)
オ ⇒ オ カ ⇒ カ ガ ⇒ ガ キ ⇒ キ ギ ⇒ ギ ク ⇒ ク グ ⇒ グ ケ ⇒ ケ ゲ ⇒ ゲ コ ⇒ コ

全角片仮名:アイウエオ、パピュプョペェポォ
全角平仮名:あいうえお、半角片仮名アイウエオ、
濁点平仮名:がぎくげご、濁点半角片仮名ガギグゲゴ
半濁平仮名:ぱぴぷぺぼ、半濁半角片仮名パピプペポ
濁点重複:バ゛ビ゛
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%¥
半角英数記号: 012,abc,ABC,#$%\


7.全角仮名英数記号を半角への変換は
>>> zen_conv(test, mode='zen2han', debug=1)
ぎ ⇒ ギ く ⇒ ク ぐ ⇒ グ け ⇒ ケ げ ⇒ ゲ こ ⇒ コ ご ⇒ ゴ さ ⇒ サ ざ ⇒ ザ し ⇒ シ

全角片仮名:アイウエケ、バピュプョペェポォ
全角平仮名:アイウエオ、半角片仮名アイウエオ、
濁点平仮名:ガギクゲゴ、濁点半角片仮名ガギグゲゴ
半濁平仮名:パピプペボ、半濁半角片仮名パピプペポ
濁点重複:バ゙ビ゙
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%\
半角英数記号: 012,abc,ABC,#$%\


8.半角カナ英数記号を全角への変換は
>>> zen_conv(test, mode='han2zen', debug=1)
5 ⇒ 5 6 ⇒ 6 7 ⇒ 7 8 ⇒ 8 9 ⇒ 9 : ⇒ : ; ⇒ ; < ⇒ < = ⇒ = > ⇒ >

全角片仮名:アイウエオ、パピュプョペェポォ
全角平仮名:あいうえお、半角片仮名アイウエオ、
濁点平仮名:がぎくげご、濁点半角片仮名ガギグゲゴ
半濁平仮名:ぱぴぷぺぼ、半濁半角片仮名パピプペポ
濁点重複:バ゛ビ゛
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%¥
半角英数記号: 012,abc,ABC,#$%¥


9.半角英数記号を全角への変換は
>>> zen_conv(test, mode='asc2zen', debug=1)
5 ⇒ 5 6 ⇒ 6 7 ⇒ 7 8 ⇒ 8 9 ⇒ 9 : ⇒ : ; ⇒ ; < ⇒ < = ⇒ = > ⇒ >

全角片仮名:アイウエオ、パピュプョペェポォ
全角平仮名:あいうえお、半角片仮名アイウエオ、
濁点平仮名:がぎくげご、濁点半角片仮名ガギグゲゴ
半濁平仮名:ぱぴぷぺぼ、半濁半角片仮名パピプペポ
濁点重複:バ゙ビ゙
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%¥
半角英数記号: 012,abc,ABC,#$%¥


10.全角英数記号を半角への変換は
>>> zen_conv(test, mode='zen2asc', debug=1)
4 ⇒ 4 5 ⇒ 5 6 ⇒ 6 7 ⇒ 7 8 ⇒ 8 9 ⇒ 9 : ⇒ : ; ⇒ ; < ⇒ < = ⇒ =

全角片仮名:アイウエオ、パピュプョペェポォ
全角平仮名:あいうえお、半角片仮名アイウエオ、
濁点平仮名:がぎくげご、濁点半角片仮名ガギグゲゴ
半濁平仮名:ぱぴぷぺぼ、半濁半角片仮名パピプペポ
濁点重複:バ゙ビ゙
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%\
半角英数記号: 012,abc,ABC,#$%\


11.全角仮名英数記号を半角への変換でyen=u'\'とすると
>>> zen_conv(test, mode='zen2han', yen=u'\', debug=1)
ぎ ⇒ ギ く ⇒ ク ぐ ⇒ グ け ⇒ ケ げ ⇒ ゲ こ ⇒ コ ご ⇒ ゴ さ ⇒ サ ざ ⇒ ザ し ⇒ シ

全角片仮名:アイウエケ、バピュプョペェポォ
全角平仮名:アイウエオ、半角片仮名アイウエオ、
濁点平仮名:ガギクゲゴ、濁点半角片仮名ガギグゲゴ
半濁平仮名:パピプペボ、半濁半角片仮名パピプペポ
濁点重複:バ゙ビ゙
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%\
半角英数記号: 012,abc,ABC,#$%\


12.半角カナ英数記号を全角への変換でyen=u'\'とすると
>>> zen_conv(test, mode='han2zen', yen=u'\', debug=1)
5 ⇒ 5 6 ⇒ 6 7 ⇒ 7 8 ⇒ 8 9 ⇒ 9 : ⇒ : ; ⇒ ; < ⇒ < = ⇒ = > ⇒ >

全角片仮名:アイウエオ、パピュプョペェポォ
全角平仮名:あいうえお、半角片仮名アイウエオ、
濁点平仮名:がぎくげご、濁点半角片仮名ガギグゲゴ
半濁平仮名:ぱぴぷぺぼ、半濁半角片仮名パピプペポ
濁点重複:バ゛ビ゛
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%\
半角英数記号: 012,abc,ABC,#$%\


13.半角英数記号を全角への変換でyen=u'\'とすると
>>> zen_conv(test, mode='asc2zen', yen=u'\', debug=1)
5 ⇒ 5 6 ⇒ 6 7 ⇒ 7 8 ⇒ 8 9 ⇒ 9 : ⇒ : ; ⇒ ; < ⇒ < = ⇒ = > ⇒ >

全角片仮名:アイウエオ、パピュプョペェポォ
全角平仮名:あいうえお、半角片仮名アイウエオ、
濁点平仮名:がぎくげご、濁点半角片仮名ガギグゲゴ
半濁平仮名:ぱぴぷぺぼ、半濁半角片仮名パピプペポ
濁点重複:バ゙ビ゙
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%\
半角英数記号: 012,abc,ABC,#$%\


14.全角英数記号を半角への変換でyen=u'\'とすると
>>> zen_conv(test, mode='zen2asc', yen=u'\', debug=1)
4 ⇒ 4 5 ⇒ 5 6 ⇒ 6 7 ⇒ 7 8 ⇒ 8 9 ⇒ 9 : ⇒ : ; ⇒ ; < ⇒ < = ⇒ =

全角片仮名:アイウエオ、パピュプョペェポォ
全角平仮名:あいうえお、半角片仮名アイウエオ、
濁点平仮名:がぎくげご、濁点半角片仮名ガギグゲゴ
半濁平仮名:ぱぴぷぺぼ、半濁半角片仮名パピプペポ
濁点重複:バ゙ビ゙
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%\
半角英数記号: 012,abc,ABC,#$%\


15.全角仮名英数記号を半角への変換でyen=Noneとすると
>>> zen_conv(test, mode='zen2han', yen=None, debug=1)
ぎ ⇒ ギ く ⇒ ク ぐ ⇒ グ け ⇒ ケ げ ⇒ ゲ こ ⇒ コ ご ⇒ ゴ さ ⇒ サ ざ ⇒ ザ し ⇒ シ

全角片仮名:アイウエケ、バピュプョペェポォ
全角平仮名:アイウエオ、半角片仮名アイウエオ、
濁点平仮名:ガギクゲゴ、濁点半角片仮名ガギグゲゴ
半濁平仮名:パピプペボ、半濁半角片仮名パピプペポ
濁点重複:バ゙ビ゙
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%¥
半角英数記号: 012,abc,ABC,#$%\


16.半角カナ英数記号を全角への変換でyen=Noneとすると
>>> zen_conv(test, mode='han2zen', yen=None, debug=1)
5 ⇒ 5 6 ⇒ 6 7 ⇒ 7 8 ⇒ 8 9 ⇒ 9 : ⇒ : ; ⇒ ; < ⇒ < = ⇒ = > ⇒ >

全角片仮名:アイウエオ、パピュプョペェポォ
全角平仮名:あいうえお、半角片仮名アイウエオ、
濁点平仮名:がぎくげご、濁点半角片仮名ガギグゲゴ
半濁平仮名:ぱぴぷぺぼ、半濁半角片仮名パピプペポ
濁点重複:バ゛ビ゛
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%¥
半角英数記号: 012,abc,ABC,#$%\


17.半角英数記号を全角への変換でyen=Noneとすると
>>> zen_conv(test, mode='asc2zen', yen=None, debug=1)
5 ⇒ 5 6 ⇒ 6 7 ⇒ 7 8 ⇒ 8 9 ⇒ 9 : ⇒ : ; ⇒ ; < ⇒ < = ⇒ = > ⇒ >

全角片仮名:アイウエオ、パピュプョペェポォ
全角平仮名:あいうえお、半角片仮名アイウエオ、
濁点平仮名:がぎくげご、濁点半角片仮名ガギグゲゴ
半濁平仮名:ぱぴぷぺぼ、半濁半角片仮名パピプペポ
濁点重複:バ゙ビ゙
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%¥
半角英数記号: 012,abc,ABC,#$%\


18.全角英数記号を半角への変換でyen=Noneとすると
>>> zen_conv(test, mode='zen2asc', yen=None, debug=1)
4 ⇒ 4 5 ⇒ 5 6 ⇒ 6 7 ⇒ 7 8 ⇒ 8 9 ⇒ 9 : ⇒ : ; ⇒ ; < ⇒ < = ⇒ =

全角片仮名:アイウエオ、パピュプョペェポォ
全角平仮名:あいうえお、半角片仮名アイウエオ、
濁点平仮名:がぎくげご、濁点半角片仮名ガギグゲゴ
半濁平仮名:ぱぴぷぺぼ、半濁半角片仮名パピプペポ
濁点重複:バ゙ビ゙
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%¥
半角英数記号: 012,abc,ABC,#$%\

19.全角カタカナを半角カナへの変換でdel_list=[u'パ', u'プ']とすると
>>> zen_conv(test, mode='kata2han', del_list=[u'パ', u'プ'], debug=1)
ク ⇒ ク グ ⇒ グ ケ ⇒ ケ ゲ ⇒ ゲ コ ⇒ コ ゴ ⇒ ゴ サ ⇒ サ ザ ⇒ ザ シ ⇒ シ ジ ⇒ ジ

全角片仮名:アイウエケ、パピュプョペェポォ
全角平仮名:あいうえお、半角片仮名アイウエオ、
濁点平仮名:がぎくげご、濁点半角片仮名ガギグゲゴ
半濁平仮名:ぱぴぷぺぼ、半濁半角片仮名パピプペポ
濁点重複:バ゙ビ゙
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%¥
半角英数記号: 012,abc,ABC,#$%\

20.全角カタカナを半角カナへの変換でalt_dic={u'パ':u'パ', u'プ':u'プ'}, del_list=[u'パ', u'プ']とすると
>>> zen_conv(test, mode='kata2han', alt_dic={u'パ':u'パ', u'プ':u'プ'}, del_list=[u'パ', u'プ'], debug=1)
ク ⇒ ク グ ⇒ グ ケ ⇒ ケ ゲ ⇒ ゲ コ ⇒ コ ゴ ⇒ ゴ サ ⇒ サ ザ ⇒ ザ シ ⇒ シ ジ ⇒ ジ

全角片仮名:アイウエケ、パピュプョペェポォ
全角平仮名:あいうえお、半角片仮名アイウエオ、
濁点平仮名:がぎくげご、濁点半角片仮名がギグゲゴ
半濁平仮名:ぱぴぷぺぼ、半濁半角片仮名パピプペポ
濁点重複:バ゙ビ゙
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%¥
半角英数記号: 012,abc,ABC,#$%\

[mire@localhost ~]$


 ソースコードは以下の通り。処理の基本は1文字ずつ辞書のキーに対する価に基づき置換して行く単純なもので、味噌は、濁点と半濁点の処理の為、unicode文字列を反転して末尾の文字から処理を進め濁点と半濁点に遭遇したら次の文字を見て単独の濁点と半濁点とするか濁点と半濁点付きの文字に置換するかを決めて行く様にする必要があることだ。その詳細は、記述が重複するのでコード内のコメントで確認頂きたい。
※ ご利用は、「【Unicode】半角カナ全角かな置替関数 for Python(正式公開版)」に掲載している最新版のjpcode.pyを活用頂きたい。
            ~/jpcode.py


#!/usr/loca/bin/python2.6
# -*- coding: utf8 -*-

u"""
######################################################################
# 1. reverse(s) : Unicode文字列用の降順並替
# 2. sort(s) : Unicode文字列用の昇順並替
# 3. zen_conv( s : 文字列s内の半角/全角カナASCII文字の変換
# , mode : 'han2hira' = 0.半角カタカナを全角ひらがなへ
# : 'kata2hira' = 1.全角カタカナを全角ひらがなへ
# : 'hira2kata' = 2.全角ひらがなを全角カタカナへ
# : 'hira2han' = 3.全角ひらがなを半角カナへ
# : 'kata2han' = 4.全角カタカナを半角カナへ
# : 'kana2han' = 5.全角平片カナを半角カナへ
# : 'han2kata' = 6.半角カタカナを全角カタカナへ(既定値)
# : 'zen2han' = 7.全角カタカナ+ひらがな+英数記号を半角へ
# : 'han2zen' = 8.半角カタカナ+全角英数記号を全角へ
# : 'asc2zen' = 9.半角英数記号を全角へ
# : 'zen2asc' =10.全角英数記号を半角へ
# , yen : 「\」を「¥」(既定値)以外で変換したい文字列を指定
# , alt_dic : 変換辞書へmap修正追加するものを辞書で指定
# , del_list: 変換辞書から除去する文字をlistで指定
# , my_dic : 固有の変換辞書を指定
# , debug) : 固有の変換辞書を指定
# modeの命名規則 : 全角ひらがな=hira, 全角カタカナ=kata, 半角=han, 全角=zen
# : ' to '='2', 半角英数記号(ascii)=asc
#  全て変換用辞書に依存し変換する仕組み。濁点・半濁点の判別の為、逆順の
# 文字列を使って処理後、再度逆順にする手法を用いている。
#【更新履歴】
# 2010-05-05 0.0.0  kana2zen()として半角カナを全角のカタカナひらがなへの
# 変換機能及び、そのテストコードを公開
# 2010-05-06 0.0.1  半角への逆変換が欲しくなったので機能拡張し、kana_conv()
# としたdebug時に参照辞書の一部を確認可能にし、指定ミスを
# 発見し易くした長音記号等漏れ等の誤りを補正。多分精度的には
# まだα1クラス。
# 2012-01-13 0.0.1a  通りすがりさんご指摘の'け''ケ'のマッピングミスを修正
# 2012-01-14 0.0.2  この__DOC__のmode名hiraをhan2hiraに変更、その他も改変
# ※0.0.1a以前と非互換。今後は新命名規則でmode名を決定
# 2012-01-15 0.1.0  全角英数記号文字の半角変換をzen2han、その逆をhan2zen
# として追加半角英数記号の全角変換をasc2zen、その逆をzen2asc
# として追加し、関数名をzen_conv()に変更
# 2012-01-16 0.1.0a  引数 yen, alt_dic, del_list, my_dic を追加し個別用途の
# 変換需要に応える様に拡張開始
#
#【判っている課題】
# 2012-01-17 alt_dicで追加したものに濁点半濁点がうまく処理出来ない場合がある。
# my_dic 利用の成否は未確認。
"""

__author__ = "Mire in Japan"
__version__ = '0.1.0'
__copyright__ = 'Copyright (c) 2010-2012 Mire'
__license__ = 'GPL'
__url__ = 'http://pythonlife.seesaa.net/article/246564649.html '


def reverse(s):
"""
Unicode文字列用の降順並替
"""
st = u'%s' % (s)
r = []
for i in st: r.append(i)
r.reverse()
rs = u''
for i in r: rs = rs + i
return rs

def sort(s):
"""
Unicode文字列用の昇順並替
"""
st = u'%s' % (s)
r = []
for i in st: r.append(i)
r.sort()
rs = u''
for i in r: rs = rs + i
return rs

def zen_conv(s, mode='han2kata', yen=u'¥'
, alt_dic={}, del_list=[]
, my_dic={}, my_daku=[], debug=0):
"""
sdsdf
"""
u"""
半角カナの全角カナ変換
第一引数に変換対象文字列を指定。
mode='hira'(既定): ひらがなへ
それ以外なら カナカナへ
"""

## 0.半角カナ ⇒ 全角ひらがな辞書 ##
han2hira = {
u'ア' :u'あ', u'イ' :u'い', u'ウ' :u'う', u'エ' :u'え', u'オ' :u'お'
, u'カ' :u'か', u'キ' :u'き', u'ク' :u'く', u'ケ' :u'け', u'コ' :u'こ'
, u'サ' :u'さ', u'シ' :u'し', u'ス' :u'す', u'セ' :u'せ', u'ソ' :u'そ'
, u'タ' :u'た', u'チ' :u'ち', u'ツ' :u'つ', u'テ' :u'て', u'ト' :u'と'
, u'ナ' :u'な', u'ニ' :u'に', u'ヌ' :u'ぬ', u'ネ' :u'ね', u'ノ' :u'の'
, u'ハ' :u'は', u'ヒ' :u'ひ', u'フ' :u'ふ', u'ヘ' :u'へ', u'ホ' :u'ほ'
, u'マ' :u'ま', u'ミ' :u'み', u'ム' :u'む', u'メ' :u'め', u'モ' :u'も'
, u'ヤ' :u'や', u'ユ' :u'ゆ', u'ヨ' :u'よ', u'゚' :u'゜', u'゙' :u'゛'
, u'ラ' :u'ら', u'リ' :u'り', u'ル' :u'る', u'レ' :u'れ', u'ロ' :u'ろ'
, u'ワ' :u'わ', u'ン' :u'ん', u'「' :u'「', u'」' :u'」', u'。' :u'。'
, u'、' :u'、', u'・' :u'・', u'ァ' :u'ぁ', u'ィ' :u'ぃ', u'ゥ' :u'ぅ'
, u'ェ' :u'ぇ', u'ォ' :u'ぉ', u'ャ' :u'ゃ', u'ュ' :u'ゅ', u'ョ' :u'ょ'

, u'ガ':u'が', u'ギ':u'ぎ', u'グ':u'ぐ', u'ゲ':u'げ', u'ゴ':u'ご'
, u'ザ':u'ざ', u'ジ':u'じ', u'ズ':u'ず', u'ゼ':u'ぜ', u'ゾ':u'ぞ'
, u'ダ':u'だ', u'ヂ':u'ぢ', u'ヅ':u'づ', u'デ':u'で', u'ド':u'ど'
, u'バ':u'ば', u'ビ':u'び', u'ブ':u'ぶ', u'ベ':u'べ', u'ボ':u'ぼ'
, u'パ':u'ぱ', u'ピ':u'ぴ', u'プ':u'ぷ', u'ペ':u'ぺ', u'ポ':u'ぽ'
, u'ヲ':u'を' , u'ー':u'ー'}

## 1.全角カタカナ ⇒ 全角ひらがな辞書 ##
kata2hira = {
u'ア':u'あ', u'イ':u'い', u'ウ':u'う', u'エ':u'え', u'オ':u'お'
, u'カ':u'か', u'キ':u'き', u'ク':u'く', u'ケ':u'け', u'コ':u'こ'
, u'サ':u'さ', u'シ':u'し', u'ス':u'す', u'セ':u'せ', u'ソ':u'そ'
, u'タ':u'た', u'チ':u'ち', u'ツ':u'つ', u'テ':u'て', u'ト':u'と'
, u'ナ':u'な', u'ニ':u'に', u'ヌ':u'ぬ', u'ネ':u'ね', u'ノ':u'の'
, u'ハ':u'は', u'ヒ':u'ひ', u'フ':u'ふ', u'ヘ':u'へ', u'ホ':u'ほ'
, u'マ':u'ま', u'ミ':u'み', u'ム':u'む', u'メ':u'め', u'モ':u'も'
, u'ヤ':u'や', u'ユ':u'ゆ', u'ヨ':u'よ', u'゜':u'゜', u'゛':u'゛'
, u'ラ':u'ら', u'リ':u'り', u'ル':u'る', u'レ':u'れ', u'ロ':u'ろ'
, u'ワ':u'わ', u'ン':u'ん' #, u'「':u'「', u'」':u'」', u'。':u'。'
#, u'、':u'、', u'・':u'・'
, u'ァ':u'ぁ', u'ィ':u'ぃ', u'ゥ':u'ぅ'
, u'ェ':u'ぇ', u'ォ':u'ぉ', u'ャ':u'ゃ', u'ュ':u'ゅ', u'ョ':u'ょ'

, u'ガ':u'が', u'ギ':u'ぎ', u'グ':u'ぐ', u'ゲ':u'げ', u'ゴ':u'ご'
, u'ザ':u'ざ', u'ジ':u'じ', u'ズ':u'ず', u'ゼ':u'ぜ', u'ゾ':u'ぞ'
, u'ダ':u'だ', u'ヂ':u'ぢ', u'ヅ':u'づ', u'デ':u'で', u'ド':u'ど'
, u'バ':u'ば', u'ビ':u'び', u'ブ':u'ぶ', u'ベ':u'べ', u'ボ':u'ぼ'
, u'パ':u'ぱ', u'ピ':u'ぴ', u'プ':u'ぷ', u'ペ':u'ぺ', u'ポ':u'ぽ'
, u'ヴ':u'う゛'
, u'ヲ':u'を'}

## 2.全角ひらがな ⇒ 全角カタカナ辞書 ##
hira2kata = {
u'あ':u'ア', u'い':u'イ', u'う':u'ウ', u'え':u'エ', u'お':u'オ'
, u'か':u'カ', u'き':u'キ', u'く':u'ク', u'け':u'ケ', u'こ':u'コ'
, u'さ':u'サ', u'し':u'シ', u'す':u'ス', u'せ':u'セ', u'そ':u'ソ'
, u'た':u'タ', u'ち':u'チ', u'つ':u'ツ', u'て':u'テ', u'と':u'ト'
, u'な':u'ナ', u'に':u'ニ', u'ぬ':u'ヌ', u'ね':u'ネ', u'の':u'ノ'
, u'は':u'ハ', u'ひ':u'ヒ', u'ふ':u'フ', u'へ':u'ヘ', u'ほ':u'ホ'
, u'ま':u'マ', u'み':u'ミ', u'む':u'ム', u'め':u'メ', u'も':u'モ'
, u'や':u'ヤ', u'ゆ':u'ユ', u'よ':u'ヨ', u'゜':u'゜', u'゛':u'゛'
, u'ら':u'ラ', u'り':u'リ', u'る':u'ル', u'れ':u'レ', u'ろ':u'ロ'
, u'わ':u'ワ', u'ん':u'ン' #, u'「':u'「', u'」':u'」', u'。':u'。'
#, u'、':u'、', u'・':u'・'
, u'ぁ':u'ァ', u'ぃ':u'ィ', u'ぅ':u'ゥ'
, u'ぇ':u'ェ', u'ぉ':u'ォ', u'ゃ':u'ャ', u'ゅ':u'ュ', u'ょ':u'ョ'

, u'が':u'ガ', u'ぎ':u'ギ', u'ぐ':u'グ', u'げ':u'ゲ', u'ご':u'ゴ'
, u'ざ':u'ザ', u'じ':u'ジ', u'ず':u'ズ', u'ぜ':u'ゼ', u'ぞ':u'ゾ'
, u'だ':u'ダ', u'ぢ':u'ヂ', u'づ':u'ヅ', u'で':u'デ', u'ど':u'ド'
, u'ば':u'バ', u'び':u'ビ', u'ぶ':u'ブ', u'べ':u'ベ', u'ぼ':u'ボ'
, u'ぱ':u'パ', u'ぴ':u'ピ', u'ぷ':u'プ', u'ぺ':u'ペ', u'ぽ':u'ポ'
, u'う゛':u'ヴ'
, u'を':u'ヲ'}

## 3.全角ひらがな ⇒ 半角カタカナ辞書 ##
hira2han = {
u'あ' :u'ア', u'い' :u'イ', u'う' :u'ウ', u'え' :u'エ', u'お' :u'オ'
, u'か' :u'カ', u'き' :u'キ', u'く' :u'ク', u'け' :u'ケ', u'こ' :u'コ'
, u'さ' :u'サ', u'し' :u'シ', u'す' :u'ス', u'せ' :u'セ', u'そ' :u'ソ'
, u'た' :u'タ', u'ち' :u'チ', u'つ' :u'ツ', u'て' :u'テ', u'と' :u'ト'
, u'な' :u'ナ', u'に' :u'ニ', u'ぬ' :u'ヌ', u'ね' :u'ネ', u'の' :u'ノ'
, u'は' :u'ハ', u'ひ' :u'ヒ', u'ふ' :u'フ', u'へ' :u'ヘ', u'ほ' :u'ホ'
, u'ま' :u'マ', u'み' :u'ミ', u'む' :u'ム', u'め' :u'メ', u'も' :u'モ'
, u'や' :u'ヤ', u'ゆ' :u'ユ', u'よ' :u'ヨ', u'゜' :u'゚', u'゛' :u'゙'
, u'ら' :u'ラ', u'り' :u'リ', u'る' :u'ル', u'れ' :u'レ', u'ろ' :u'ロ'
, u'わ' :u'ワ', u'ん' :u'ン', u'「' :u'「', u'」' :u'」', u'。' :u'。'
, u'、' :u'、', u'・' :u'・', u'ぁ' :u'ァ', u'ぃ' :u'ィ', u'ぅ' :u'ゥ'
, u'ぇ' :u'ェ', u'ぉ' :u'ォ', u'ゃ' :u'ャ', u'ゅ' :u'ュ', u'ょ' :u'ョ'

, u'が':u'ガ', u'ぎ':u'ギ', u'ぐ':u'グ', u'げ':u'ゲ', u'ご':u'ゴ'
, u'ざ':u'ザ', u'じ':u'ジ', u'ず':u'ズ', u'ぜ':u'ゼ', u'ぞ':u'ゾ'
, u'だ':u'ダ', u'ぢ':u'ヂ', u'づ':u'ヅ', u'で':u'デ', u'ど':u'ド'
, u'ば':u'バ', u'び':u'ビ', u'ぶ':u'ブ', u'べ':u'ベ', u'ぼ':u'ボ'
, u'ぱ':u'パ', u'ぴ':u'ピ', u'ぷ':u'プ', u'ぺ':u'ペ', u'ぽ':u'ポ'
, u'を':u'ヲ' , u'ー':u'ー'}

## 4.全角カタカナ ⇒ 半角カナ辞書 ##
kata2han = {
u'ア':u'ア', u'イ':u'イ', u'ウ':u'ウ', u'エ':u'エ', u'オ':u'ケ'
, u'カ':u'カ', u'キ':u'キ', u'ク':u'ク', u'ケ':u'ケ', u'コ':u'コ'
, u'サ':u'サ', u'シ':u'シ', u'ス':u'ス', u'セ':u'セ', u'ソ':u'ソ'
, u'タ':u'タ', u'チ':u'チ', u'ツ':u'ツ', u'テ':u'テ', u'ト':u'ト'
, u'ナ':u'ナ', u'ニ':u'ニ', u'ヌ':u'ヌ', u'ネ':u'ネ', u'ノ':u'ノ'
, u'ハ':u'ハ', u'ヒ':u'ヒ', u'フ':u'フ', u'ヘ':u'ヘ', u'ホ':u'ホ'
, u'マ':u'マ', u'ミ':u'ミ', u'ム':u'ム', u'メ':u'メ', u'モ':u'モ'
, u'ヤ':u'ヤ', u'ユ':u'ユ', u'ヨ':u'ヨ', u'゜':u'゚', u'゛':u'゙'
, u'ラ':u'ラ', u'リ':u'リ', u'ル':u'ル', u'レ':u'レ', u'ロ':u'ロ'
, u'ワ':u'ワ', u'ン':u'ン', u'「':u'「', u'」':u'」', u'。':u'。'
, u'、':u'、', u'・':u'・', u'ァ':u'ァ', u'ィ':u'ィ', u'ゥ':u'ゥ'
, u'ェ':u'ェ', u'ォ':u'ォ', u'ャ':u'ャ', u'ュ':u'ュ', u'ョ':u'ョ'

, u'ガ':u'ガ', u'ギ':u'ギ', u'グ':u'グ', u'ゲ':u'ゲ', u'ゴ':u'ゴ'
, u'ザ':u'ザ', u'ジ':u'ジ', u'ズ':u'ズ', u'ゼ':u'ゼ', u'ゾ':u'ゾ'
, u'ダ':u'ダ', u'ヂ':u'ヂ', u'ヅ':u'ヅ', u'デ':u'デ', u'ド':u'ド'
, u'バ':u'バ', u'ビ':u'ビ', u'ブ':u'ブ', u'ベ':u'ベ', u'ボ':u'ボ'
, u'パ':u'バ', u'ピ':u'ピ', u'プ':u'プ', u'ペ':u'ペ', u'ポ':u'ポ'
, u'ヴ':u'ヴ'
, u'ヲ':u'ヲ' , u'ー':u'ー'}

## 5.全角ひらがな+全角カタカナ ⇒ 半角カナ辞書 ##
kana2han = {
u'ア':u'ア', u'イ':u'イ', u'ウ':u'ウ', u'エ':u'エ', u'オ':u'ケ'
, u'カ':u'カ', u'キ':u'キ', u'ク':u'ク', u'ケ':u'ケ', u'コ':u'コ'
, u'サ':u'サ', u'シ':u'シ', u'ス':u'ス', u'セ':u'セ', u'ソ':u'ソ'
, u'タ':u'タ', u'チ':u'チ', u'ツ':u'ツ', u'テ':u'テ', u'ト':u'ト'
, u'ナ':u'ナ', u'ニ':u'ニ', u'ヌ':u'ヌ', u'ネ':u'ネ', u'ノ':u'ノ'
, u'ハ':u'ハ', u'ヒ':u'ヒ', u'フ':u'フ', u'ヘ':u'ヘ', u'ホ':u'ホ'
, u'マ':u'マ', u'ミ':u'ミ', u'ム':u'ム', u'メ':u'メ', u'モ':u'モ'
, u'ヤ':u'ヤ', u'ユ':u'ユ', u'ヨ':u'ヨ', u'゜':u'゚', u'゛':u'゙'
, u'ラ':u'ラ', u'リ':u'リ', u'ル':u'ル', u'レ':u'レ', u'ロ':u'ロ'
, u'ワ':u'ワ', u'ン':u'ン', u'「':u'「', u'」':u'」', u'。':u'。'
, u'、':u'、', u'・':u'・', u'ァ':u'ァ', u'ィ':u'ィ', u'ゥ':u'ゥ'
, u'ェ':u'ェ', u'ォ':u'ォ', u'ャ':u'ャ', u'ュ':u'ュ', u'ョ':u'ョ'

, u'ガ':u'ガ', u'ギ':u'ギ', u'グ':u'グ', u'ゲ':u'ゲ', u'ゴ':u'ゴ'
, u'ザ':u'ザ', u'ジ':u'ジ', u'ズ':u'ズ', u'ゼ':u'ゼ', u'ゾ':u'ゾ'
, u'ダ':u'ダ', u'ヂ':u'ヂ', u'ヅ':u'ヅ', u'デ':u'デ', u'ド':u'ド'
, u'バ':u'バ', u'ビ':u'ビ', u'ブ':u'ブ', u'ベ':u'ベ', u'ボ':u'ボ'
, u'パ':u'バ', u'ピ':u'ピ', u'プ':u'プ', u'ペ':u'ペ', u'ポ':u'ポ'
, u'ヴ':u'ヴ'
, u'ヲ':u'ヲ'

, u'あ' :u'ア', u'い' :u'イ', u'う' :u'ウ', u'え' :u'エ', u'お' :u'オ'
, u'か' :u'カ', u'き' :u'キ', u'く' :u'ク', u'け' :u'ケ', u'こ' :u'コ'
, u'さ' :u'サ', u'し' :u'シ', u'す' :u'ス', u'せ' :u'セ', u'そ' :u'ソ'
, u'た' :u'タ', u'ち' :u'チ', u'つ' :u'ツ', u'て' :u'テ', u'と' :u'ト'
, u'な' :u'ナ', u'に' :u'ニ', u'ぬ' :u'ヌ', u'ね' :u'ネ', u'の' :u'ノ'
, u'は' :u'ハ', u'ひ' :u'ヒ', u'ふ' :u'フ', u'へ' :u'ヘ', u'ほ' :u'ホ'
, u'ま' :u'マ', u'み' :u'ミ', u'む' :u'ム', u'め' :u'メ', u'も' :u'モ'
, u'や' :u'ヤ', u'ゆ' :u'ユ', u'よ' :u'ヨ', u'゜' :u'゚', u'゛' :u'゙'
, u'ら' :u'ラ', u'り' :u'リ', u'る' :u'ル', u'れ' :u'レ', u'ろ' :u'ロ'
, u'わ' :u'ワ', u'ん' :u'ン'
, u'、' :u'、', u'・' :u'・', u'ぁ' :u'ァ', u'ぃ' :u'ィ', u'ぅ' :u'ゥ'
, u'ぇ' :u'ェ', u'ぉ' :u'ォ', u'ゃ' :u'ャ', u'ゅ' :u'ュ', u'ょ' :u'ョ'

, u'が':u'ガ', u'ぎ':u'ギ', u'ぐ':u'グ', u'げ':u'ゲ', u'ご':u'ゴ'
, u'ざ':u'ザ', u'じ':u'ジ', u'ず':u'ズ', u'ぜ':u'ゼ', u'ぞ':u'ゾ'
, u'だ':u'ダ', u'ぢ':u'ヂ', u'づ':u'ヅ', u'で':u'デ', u'ど':u'ド'
, u'ば':u'バ', u'び':u'ビ', u'ぶ':u'ブ', u'べ':u'ベ', u'ぼ':u'ボ'
, u'ぱ':u'パ', u'ぴ':u'ピ', u'ぷ':u'プ', u'ぺ':u'ペ', u'ぽ':u'ポ'
, u'を':u'ヲ' , u'ー':u'ー'}


## 6.半角カナ ⇒ 全角カタカナ辞書 ##
han2kata = {
u'ア' :u'ア', u'イ' :u'イ', u'ウ' :u'ウ', u'エ' :u'エ', u'オ' :u'オ'
, u'カ' :u'カ', u'キ' :u'キ', u'ク' :u'ク', u'ケ' :u'ケ', u'コ' :u'コ'
, u'サ' :u'サ', u'シ' :u'シ', u'ス' :u'ス', u'セ' :u'セ', u'ソ' :u'ソ'
, u'タ' :u'タ', u'チ' :u'チ', u'ツ' :u'ツ', u'テ' :u'テ', u'ト' :u'ト'
, u'ナ' :u'ナ', u'ニ' :u'ニ', u'ヌ' :u'ヌ', u'ネ' :u'ネ', u'ノ' :u'ノ'
, u'ハ' :u'ハ', u'ヒ' :u'ヒ', u'フ' :u'フ', u'ヘ' :u'ヘ', u'ホ' :u'ホ'
, u'マ' :u'マ', u'ミ' :u'ミ', u'ム' :u'ム', u'メ' :u'メ', u'モ' :u'モ'
, u'ヤ' :u'ヤ', u'ユ' :u'ユ', u'ヨ' :u'ヨ', u'゚' :u'゜', u'゙' :u'゛'
, u'ラ' :u'ラ', u'リ' :u'リ', u'ル' :u'ル', u'レ' :u'レ', u'ロ' :u'ロ'
, u'ワ' :u'ワ', u'ン' :u'ン', u'「' :u'「', u'」' :u'」', u'。' :u'。'
, u'、' :u'、', u'・' :u'・', u'ァ' :u'ァ', u'ィ' :u'ィ', u'ゥ' :u'ゥ'
, u'ェ' :u'ェ', u'ォ' :u'ォ', u'ャ' :u'ャ', u'ュ' :u'ュ', u'ョ' :u'ョ'

, u'ガ':u'ガ', u'ギ':u'ギ', u'グ':u'グ', u'ゲ':u'ゲ', u'ゴ':u'ゴ'
, u'ザ':u'ザ', u'ジ':u'ジ', u'ズ':u'ズ', u'ゼ':u'ゼ', u'ゾ':u'ゾ'
, u'ダ':u'ダ', u'ヂ':u'ヂ', u'ヅ':u'ヅ', u'デ':u'デ', u'ド':u'ド'
, u'バ':u'バ', u'ビ':u'ビ', u'ブ':u'ブ', u'ベ':u'ベ', u'ボ':u'ボ'
, u'パ':u'パ', u'ピ':u'ピ', u'プ':u'プ', u'ペ':u'ペ', u'ポ':u'ポ'
, u'ヴ':u'ヴ' #全角カタカナのみ「ヴ」がある!
, u'ヲ' :u'ヲ', u'ー':u'ー'}

## 7.全角ひらがな+全角カタカナ+全角英数記号 ⇒ 半角カナ辞書 ##
zen2han = {
u'A':'A', u'B':'B', u'C':'C', u'D':'D', u'E':'E'
, u'F':'F', u'G':'G', u'H':'H', u'I':'I', u'J':'J'
, u'K':'K', u'L':'L', u'M':'M', u'N':'N', u'O':'O'
, u'P':'P', u'Q':'Q', u'R':'R', u'S':'S', u'T':'T'
, u'U':'U', u'V':'V', u'W':'W', u'X':'X', u'Y':'Y'
, u'Z':'z', u'!':'!', u'”':'\"', u'#':'#', u'$':'$'
, u'%':'%', u'&':'&', u'’':'\'', u'(':'(', u')':')'
, u'−':'-', u'=':'=', u'^':'^', u'〜':'~', u'¥':'\\'
, u'@':'@', u'‘':'`', u'[':'[', u'{':'{', u';':';'
, u'+':'+', u':':':', u'*':'*', u']':']', u'}':'}'
, u',':',', u'<':'<', u'.':'.', u'>':'>', u'/':'/'
, u'?':'?', u'\':'\\', u'_':'_' #, u'':'', u'':''
# , u'':'', u'':'', u'':'', u'':'', u'':''
, u'a':'a', u'b':'b', u'c':'c', u'd':'d', u'e':'e'
, u'f':'f', u'g':'g', u'h':'h', u'i':'i', u'j':'j'
, u'k':'k', u'l':'l', u'm':'m', u'n':'n', u'o':'o'
, u'p':'p', u'q':'q', u'r':'r', u's':'s', u't':'t'
, u'u':'u', u'v':'v', u'w':'w', u'x':'x', u'y':'y'
, u'z':'z' #, u'':'', u'':'', u'':'', u'':''
, u'0':'0', u'1':'1', u'2':'2', u'3':'3', u'4':'4'
, u'5':'5', u'6':'6', u'7':'7', u'8':'8', u'9':'9'
, u'ア':u'ア', u'イ':u'イ', u'ウ':u'ウ', u'エ':u'エ', u'オ':u'ケ'
, u'カ':u'カ', u'キ':u'キ', u'ク':u'ク', u'ケ':u'ケ', u'コ':u'コ'
, u'サ':u'サ', u'シ':u'シ', u'ス':u'ス', u'セ':u'セ', u'ソ':u'ソ'
, u'タ':u'タ', u'チ':u'チ', u'ツ':u'ツ', u'テ':u'テ', u'ト':u'ト'
, u'ナ':u'ナ', u'ニ':u'ニ', u'ヌ':u'ヌ', u'ネ':u'ネ', u'ノ':u'ノ'
, u'ハ':u'ハ', u'ヒ':u'ヒ', u'フ':u'フ', u'ヘ':u'ヘ', u'ホ':u'ホ'
, u'マ':u'マ', u'ミ':u'ミ', u'ム':u'ム', u'メ':u'メ', u'モ':u'モ'
, u'ヤ':u'ヤ', u'ユ':u'ユ', u'ヨ':u'ヨ', u'゜':u'゚', u'゛':u'゙'
, u'ラ':u'ラ', u'リ':u'リ', u'ル':u'ル', u'レ':u'レ', u'ロ':u'ロ'
, u'ワ':u'ワ', u'ン':u'ン', u'「':u'「', u'」':u'」', u'。':u'。'
, u'、':u'、', u'・':u'・', u'ァ':u'ァ', u'ィ':u'ィ', u'ゥ':u'ゥ'
, u'ェ':u'ェ', u'ォ':u'ォ', u'ャ':u'ャ', u'ュ':u'ュ', u'ョ':u'ョ'

, u'ガ':u'ガ', u'ギ':u'ギ', u'グ':u'グ', u'ゲ':u'ゲ', u'ゴ':u'ゴ'
, u'ザ':u'ザ', u'ジ':u'ジ', u'ズ':u'ズ', u'ゼ':u'ゼ', u'ゾ':u'ゾ'
, u'ダ':u'ダ', u'ヂ':u'ヂ', u'ヅ':u'ヅ', u'デ':u'デ', u'ド':u'ド'
, u'バ':u'バ', u'ビ':u'ビ', u'ブ':u'ブ', u'ベ':u'ベ', u'ボ':u'ボ'
, u'パ':u'バ', u'ピ':u'ピ', u'プ':u'プ', u'ペ':u'ペ', u'ポ':u'ポ'
, u'ヴ':u'ヴ'
, u'ヲ':u'ヲ'

, u'あ' :u'ア', u'い' :u'イ', u'う' :u'ウ', u'え' :u'エ', u'お' :u'オ'
, u'か' :u'カ', u'き' :u'キ', u'く' :u'ク', u'け' :u'ケ', u'こ' :u'コ'
, u'さ' :u'サ', u'し' :u'シ', u'す' :u'ス', u'せ' :u'セ', u'そ' :u'ソ'
, u'た' :u'タ', u'ち' :u'チ', u'つ' :u'ツ', u'て' :u'テ', u'と' :u'ト'
, u'な' :u'ナ', u'に' :u'ニ', u'ぬ' :u'ヌ', u'ね' :u'ネ', u'の' :u'ノ'
, u'は' :u'ハ', u'ひ' :u'ヒ', u'ふ' :u'フ', u'へ' :u'ヘ', u'ほ' :u'ホ'
, u'ま' :u'マ', u'み' :u'ミ', u'む' :u'ム', u'め' :u'メ', u'も' :u'モ'
, u'や' :u'ヤ', u'ゆ' :u'ユ', u'よ' :u'ヨ', u'゜' :u'゚', u'゛' :u'゙'
, u'ら' :u'ラ', u'り' :u'リ', u'る' :u'ル', u'れ' :u'レ', u'ろ' :u'ロ'
, u'わ' :u'ワ', u'ん' :u'ン'
, u'、' :u'、', u'・' :u'・', u'ぁ' :u'ァ', u'ぃ' :u'ィ', u'ぅ' :u'ゥ'
, u'ぇ' :u'ェ', u'ぉ' :u'ォ', u'ゃ' :u'ャ', u'ゅ' :u'ュ', u'ょ' :u'ョ'

, u'が':u'ガ', u'ぎ':u'ギ', u'ぐ':u'グ', u'げ':u'ゲ', u'ご':u'ゴ'
, u'ざ':u'ザ', u'じ':u'ジ', u'ず':u'ズ', u'ぜ':u'ゼ', u'ぞ':u'ゾ'
, u'だ':u'ダ', u'ぢ':u'ヂ', u'づ':u'ヅ', u'で':u'デ', u'ど':u'ド'
, u'ば':u'バ', u'び':u'ビ', u'ぶ':u'ブ', u'べ':u'ベ', u'ぼ':u'ボ'
, u'ぱ':u'パ', u'ぴ':u'ピ', u'ぷ':u'プ', u'ぺ':u'ペ', u'ぽ':u'ポ'
, u'を':u'ヲ' , u'ー':u'ー'}

## 8.半角カタカナ+半角英数記号 ⇒ 全角辞書 ##
han2zen = {'A':u'A', 'B':u'B', 'C':u'C', 'D':u'D', 'E':u'E'
,'F':u'F', 'G':u'G', 'H':u'H', 'I':u'I', 'J':u'J'
,'K':u'K', 'L':u'L', 'M':u'M', 'N':u'N', 'O':u'O'
,'P':u'P', 'Q':u'Q', 'R':u'R', 'S':u'S', 'T':u'T'
,'U':u'U', 'V':u'V', 'W':u'W', 'X':u'X', 'Y':u'Y'
,'Z':u'Z', '!':u'!', '\"':u'”', '#':u'#', '$':u'$'
,'%':u'%', '&':u'&', '\'':u'’', '(':u'(', ')':u')'
,'~':u'〜', '-':u'−', '=':u'=', '^':u'^', '~':u'〜'
,'\\':u'¥', '|':u'|', '@':u'@', '`':u'‘', '[':u'['
,'{':u'{', ';':u';', '+':u'+', ':':u':', '*':u'*'
,']':u']', '}':u'}', ',':u',', '<':u'<', '.':u'.'
,'>':u'>', '/':u'/', '?':u'?', '_':u'_'
,'a':u'a', 'b':u'b', 'c':u'c', 'd':u'd', 'e':u'e'
,'f':u'f', 'g':u'g', 'h':u'h', 'i':u'i', 'j':u'j'
,'k':u'k', 'l':u'l', 'm':u'm', 'n':u'n', 'o':u'o'
,'p':u'p', 'q':u'q', 'r':u'r', 's':u's', 't':u't'
,'u':u'u', 'v':u'v', 'w':u'w', 'x':u'x', 'y':u'y'
,'z':u'z' #, '':u'', '':u'', '':u'', '':u''

, '0':u'0', '1':u'1', '2':u'2', '3':u'3', '4':u'4'
,'5':u'5', '6':u'6', '7':u'7', '8':u'8', '9':u'9'
, u'ア' :u'ア', u'イ' :u'イ', u'ウ' :u'ウ', u'エ' :u'エ', u'オ' :u'オ'
, u'カ' :u'カ', u'キ' :u'キ', u'ク' :u'ク', u'ケ' :u'ケ', u'コ' :u'コ'
, u'サ' :u'サ', u'シ' :u'シ', u'ス' :u'ス', u'セ' :u'セ', u'ソ' :u'ソ'
, u'タ' :u'タ', u'チ' :u'チ', u'ツ' :u'ツ', u'テ' :u'テ', u'ト' :u'ト'
, u'ナ' :u'ナ', u'ニ' :u'ニ', u'ヌ' :u'ヌ', u'ネ' :u'ネ', u'ノ' :u'ノ'
, u'ハ' :u'ハ', u'ヒ' :u'ヒ', u'フ' :u'フ', u'ヘ' :u'ヘ', u'ホ' :u'ホ'
, u'マ' :u'マ', u'ミ' :u'ミ', u'ム' :u'ム', u'メ' :u'メ', u'モ' :u'モ'
, u'ヤ' :u'ヤ', u'ユ' :u'ユ', u'ヨ' :u'ヨ', u'゚' :u'゜', u'゙' :u'゛'
, u'ラ' :u'ラ', u'リ' :u'リ', u'ル' :u'ル', u'レ' :u'レ', u'ロ' :u'ロ'
, u'ワ' :u'ワ', u'ン' :u'ン', u'「' :u'「', u'」' :u'」', u'。' :u'。'
, u'、' :u'、', u'・' :u'・', u'ァ' :u'ァ', u'ィ' :u'ィ', u'ゥ' :u'ゥ'
, u'ェ' :u'ェ', u'ォ' :u'ォ', u'ャ' :u'ャ', u'ュ' :u'ュ', u'ョ' :u'ョ'

, u'ガ':u'ガ', u'ギ':u'ギ', u'グ':u'グ', u'ゲ':u'ゲ', u'ゴ':u'ゴ'
, u'ザ':u'ザ', u'ジ':u'ジ', u'ズ':u'ズ', u'ゼ':u'ゼ', u'ゾ':u'ゾ'
, u'ダ':u'ダ', u'ヂ':u'ヂ', u'ヅ':u'ヅ', u'デ':u'デ', u'ド':u'ド'
, u'バ':u'バ', u'ビ':u'ビ', u'ブ':u'ブ', u'ベ':u'ベ', u'ボ':u'ボ'
, u'パ':u'パ', u'ピ':u'ピ', u'プ':u'プ', u'ペ':u'ペ', u'ポ':u'ポ'
, u'ヴ':u'ヴ' #全角カタカナのみ「ヴ」がある!
, u'ヲ' :u'ヲ', u'ー':u'ー'}

## 9.半角英数記号を全角へ ##
zen2asc = {u'A':'A', u'B':'B', u'C':'C', u'D':'D', u'E':'E'
, u'F':'F', u'G':'G', u'H':'H', u'I':'I', u'J':'J'
, u'K':'K', u'L':'L', u'M':'M', u'N':'N', u'O':'O'
, u'P':'P', u'Q':'Q', u'R':'R', u'S':'S', u'T':'T'
, u'U':'U', u'V':'V', u'W':'W', u'X':'X', u'Y':'Y'
, u'Z':'z', u'!':'!', u'”':'\"', u'#':'#', u'$':'$'
, u'%':'%', u'&':'&', u'’':'\'', u'(':'(', u')':')'
, u'−':'-', u'=':'=', u'^':'^', u'〜':'~', u'¥':'\\'
, u'@':'@', u'‘':'`', u'[':'[', u'{':'{', u';':';'
, u'+':'+', u':':':', u'*':'*', u']':']', u'}':'}'
, u',':',', u'<':'<', u'.':'.', u'>':'>', u'/':'/'
, u'?':'?', u'\':'\\', u'_':'_' #, u'':'', u'':''
# , u'':'', u'':'', u'':'', u'':'', u'':''
, u'a':'a', u'b':'b', u'c':'c', u'd':'d', u'e':'e'
, u'f':'f', u'g':'g', u'h':'h', u'i':'i', u'j':'j'
, u'k':'k', u'l':'l', u'm':'m', u'n':'n', u'o':'o'
, u'p':'p', u'q':'q', u'r':'r', u's':'s', u't':'t'
, u'u':'u', u'v':'v', u'w':'w', u'x':'x', u'y':'y'
, u'z':'z' #, u'':'', u'':'', u'':'', u'':''
, u'0':'0', u'1':'1', u'2':'2', u'3':'3', u'4':'4'
, u'5':'5', u'6':'6', u'7':'7', u'8':'8', u'9':'9'}

## 10.全角英数記号を半角へ ##
asc2zen = {'A':u'A', 'B':u'B', 'C':u'C', 'D':u'D', 'E':u'E'
,'F':u'F', 'G':u'G', 'H':u'H', 'I':u'I', 'J':u'J'
,'K':u'K', 'L':u'L', 'M':u'M', 'N':u'N', 'O':u'O'
,'P':u'P', 'Q':u'Q', 'R':u'R', 'S':u'S', 'T':u'T'
,'U':u'U', 'V':u'V', 'W':u'W', 'X':u'X', 'Y':u'Y'
,'Z':u'Z', '!':u'!', '\"':u'”', '#':u'#', '$':u'$'
,'%':u'%', '&':u'&', '\'':u'’', '(':u'(', ')':u')'
,'~':u'〜', '-':u'−', '=':u'=', '^':u'^', '~':u'〜'
,'\\':u'¥', '|':u'|', '@':u'@', '`':u'‘', '[':u'['
,'{':u'{', ';':u';', '+':u'+', ':':u':', '*':u'*'
,']':u']', '}':u'}', ',':u',', '<':u'<', '.':u'.'
,'>':u'>', '/':u'/', '?':u'?', '_':u'_'
,'a':u'a', 'b':u'b', 'c':u'c', 'd':u'd', 'e':u'e'
,'f':u'f', 'g':u'g', 'h':u'h', 'i':u'i', 'j':u'j'
,'k':u'k', 'l':u'l', 'm':u'm', 'n':u'n', 'o':u'o'
,'p':u'p', 'q':u'q', 'r':u'r', 's':u's', 't':u't'
,'u':u'u', 'v':u'v', 'w':u'w', 'x':u'x', 'y':u'y'
,'z':u'z' #, '':u'', '':u'', '':u'', '':u''

, '0':u'0', '1':u'1', '2':u'2', '3':u'3', '4':u'4'
,'5':u'5', '6':u'6', '7':u'7', '8':u'8', '9':u'9'}

if not my_dic=={}:
mode = 'my_dic'
conv_dic={}
## ¥(asciiのバックスラッシュを全角の円マーク以外と対応) ##
if yen==None: #Noneの指定なら、処理から除外
try:
del han2zen['\\']
except:
pass
try:
del asc2zen['\\']
except:
pass
try:
del zen2han[u'¥']
except:
pass
try:
del zen2asc[u'¥']
except:
pass
try:
del zen2han[u'\']
except:
pass
try:
del zen2asc[u'\']
except:
pass
elif not yen==u'¥': #u'¥'以外の指定なら、それを対象に
han2zen['\\'] = yen
asc2zen['\\'] = yen
han2zen[u'¥'] = yen # 文中のu'¥'も指定文字へ変更
asc2zen[u'¥'] = yen

zen2han[yen] = '\\'
zen2asc[yen] = '\\'

## モード設定により辞書を選択 ##
md = mode.lower() #mode文字列を小文字としてmode判定2012-01-14
daku = [u'゛', u'゜', u'゙', u'゚'] #濁点、半濁点のリスト
if not my_dic=={}: #my_dic指定時は
conv_dic = my_dic # my_dicを辞書とし
elif md == 'han2hira': # 0.半角カナを全角ひらがなへ
conv_dic = han2hira # 半角カナ⇒ 全角ひらがな辞書
elif md == 'kata2hira': # 1.全角カタカナを全角ひらがなへ
conv_dic = kata2hira
elif md == 'hira2kata': # 2.全角ひらがなを全角カタカナへ
conv_dic = hira2kata
elif md == 'hira2han': # 3.全角ひらがなを半角カナへ
conv_dic = hira2han
elif md == 'kata2han': # 4.全角カタカナを半角カナへ
conv_dic = kata2han
elif md == 'kana2han': # 5.全角平片仮名を半角カナへ
conv_dic = kana2han
elif md == 'han2kata': #6.半角カナを全角カタカナへ(既定値)
conv_dic = han2kata # 半角カナ ⇒ 全角カタカナ辞書
elif md == 'zen2han': # 7.全角ひらがな+全角カタカナ+全角英数記号を半角へ
conv_dic = zen2han
elif md == 'han2zen': # 8.半角カタカナ+半角英数記号を全角へ
conv_dic = han2zen
elif md == 'zen2asc': # 9.半角英数記号を全角へ
conv_dic = zen2asc
elif md == 'asc2zen': #10.全角英数記号を半角へ
conv_dic = asc2zen
else: #6.半角カナを全角カタカナへ(既定値)
conv_dic = han2kata # 半角カナ ⇒ 全角カタカナ辞書

##
if not alt_dic=={}:
for key in alt_dic:
conv_dic[key] = alt_dic[key]
if not len(del_list)==0:
for del_key in del_list:
try:
del conv_dic[del_key]
except:
pass
# s_list = []
# for key in conv_dic:
# s_list.append('%s:%s' % (key, conv_dic[key]))
# print 'conv_dic={%s}' % (', '.join(s_list))
## debug時の表示 ##
if debug>0: #debugモードでは
conv_ks = conv_dic.keys() # 指定変換辞書のキーを取得し
conv_ks.sort() # それを文字コード順に並べ替え
for i in range(10): # 10個をその順でキーと値を標準出力
print u'%s ⇒ %s' % (conv_ks[20+i] #2012-01-13 uを追加補正
,conv_dic[conv_ks[20+i]]),
print

## 変換文字列の作成 ##
# カナの半角全角変換で注意すべきは濁点/半濁点が1文字として常に独立するかどうだ。
#その処理をutf-8でコーディングするには、先ず文字列を確実にunicode化し反転させ
#一文字ずつ取出し、濁点/半濁点が確認されたときには、処理を保留し次の文字が、
#同じく濁点/半濁点だったら、濁点/半濁点の連続として前の濁点/半濁点の文字を書出し
#そうでなかったら、前の濁点/半濁点の文字とくっ付けた文字列が変換候補にないかを
#見て、そうなら、その変換文字を書出し、そうでないなら、前の濁点/半濁点を単独変換した
#ものを書出し濁点/半濁点でなかった文字の変換文字を書出す。
#辞書にない文字なら、前が濁点/半濁点なら単独変換で書出しから辞書になかった文字を書出し
#最後に書き出した文字列を反転し元に戻して値を返す。

o = u'%s' % (unicode(s)) # 濁音半濁音処理の為お尻から処理したいので
o = reverse(o) # Unicode文字として並びを反転した上で
z = p = u'' # 処理用文字列初期化(z=変換後文字列)
for h in o: # 文字列を1文字ずつ取出し
if h in conv_dic: # それが辞書にある文字で
if h in daku: # 濁点、半濁点で
if p in daku: # ひとつ前もそうだったなら
z = z + conv_dic[p] # 前のものを全角の濁点、半濁点に変換し追加
p=u'%s' % (h) # その文字をpで一つ前の文字として記憶
else: # 濁点、半濁点でなかったら
k = u'%s%s' % (h, p) # 前のもの(半/濁点)とその文字をくっ付けたものが
if k in conv_dic: # 濁点、半濁点付の候補であれば
z = z + reverse( # その文字に変換し追加
conv_dic[k]) #
else: # そうでないなら、仕方ないので
z = z + conv_dic[p] # 変換後の濁点、半濁点に変換
z = z + conv_dic[h] # 辞書で全角分に置換して文字列を作る
p = u'' # 処理が済んだのでpの記憶を消去し通常モードに
else: # 逆にそれが辞書にない文字で
if not p == u'': # pに記憶があるなら
z = z + conv_dic[p] # その変換後分を単独で登録
p = u'' # 処理が済んだのでpの記憶を消去し通常モードに
z = z + h # そのままの文字を追加
return reverse(z) # 作成した文字列を文字単位で反転し
# その変換済文字列を返す


def _test(debug=1):
u"""
zen_conv()の処理テスト用関数
"""
test = u"""
全角片仮名:アイウエオ、パピュプョペェポォ
全角平仮名:あいうえお、半角片仮名アイウエオ、
濁点平仮名:がぎくげご、濁点半角片仮名ガギグゲゴ
半濁平仮名:ぱぴぷぺぼ、半濁半角片仮名パピプペポ
濁点重複:バ゙ビ゙
ヴィー、ヴィー
全角英数記号: 012,abc,ABC,#$%¥
半角英数記号: 012,abc,ABC,#$%\\
"""
print __doc__
print 'orignal text'
print 'testに次の様に文字列を代入し'
print '>>> test=u\"\"\"%s\"\"\"' % (test)
mode_names={ 'han2hira' :u'# 0.半角カタカナを全角ひらがなへ'
, 'kata2hira':u'# 1.全角カタカナを全角ひらがなへ'
, 'hira2kata':u'# 2.全角ひらがなを全角カタカナへ'
, 'hira2han' :u'# 3.全角ひらがなを半角カナへ'
, 'kata2han' :u'# 4.全角カタカナを半角カナへ'
, 'kana2han' :u'# 5.全角かなを半角カナへ'
, 'han2kata' :u'# 6.半角カナを全角カタカナへ'
, 'zen2han' :u'# 7.全角仮名英数記号を半角へ'
, 'han2zen' :u'# 8.半角カナ英数記号を全角へ'
, 'asc2zen' :u'# 9.半角英数記号を全角へ'
, 'zen2asc' :u'#10.全角英数記号を半角へ'}
modes=['han2hira', 'kata2hira', 'hira2kata', 'hira2han', 'kata2han'
, 'kana2han', 'han2kata', 'zen2han','han2zen', 'asc2zen'
, 'zen2asc']
n = 0
#全modeでtest文字列を変換
for m in modes:
print
print u'%3d%sの変換は' % (n, mode_names[m][3:])
print '>>> zen_conv(test, mode=\'%s\', debug=1)' % (m)
print zen_conv(test, mode=m, debug=1)
n += 1
#英数記号を含むmodeで「¥」を「\」で処理
ascmodes=['zen2han','han2zen', 'asc2zen', 'zen2asc']
for m in ascmodes:
print
print u'%3d%sの変換でyen=u\'\\'とすると' % (n, mode_names[m][3:])
print u'>>> zen_conv(test, mode=\'%s\', yen=u\'\\', debug=1)' % (m)
print zen_conv(test, mode=m, yen=u'\', debug=1)
n += 1
#英数記号を含むmodeで「¥」や「\」の処理を外す
for m in ascmodes:
print
print u'%3d%sの変換でyen=Noneとすると' % (n, mode_names[m][3:])
print u'>>> zen_conv(test, mode=\'%s\', yen=None, debug=1)' % (m)
print zen_conv(test, mode=m, yen=None, debug=1)
n += 1
m = 'kata2han'
print u'%3d%sの変換でdel_list=[u\'パ\', u\'プ\']とすると' % (n, mode_names[m][3:])
print u'>>> zen_conv(test, mode=\'%s\', del_list=[u\'パ\', u\'プ\'], debug=1)' % (m)
print zen_conv(test, mode=m, del_list=[u'パ', u'プ'], debug=1)
n += 1
m = 'kata2han'
print u'%3d%sの変換でalt_dic={u\'パ\':u\'パ\', u\'プ\':u\'プ\'}, del_list=[u\'パ\', u\'プ\']とすると' % (n, mode_names[m][3:])
print u'>>> zen_conv(test, mode=\'%s\', alt_dic={u\'パ\':u\'パ\', u\'プ\':u\'プ\'}, del_list=[u\'パ\', u\'プ\'], debug=1)' % (m)
print zen_conv(test, mode=m, alt_dic={u'カ':u'か', u'ガ':u'が', u'パ':u'パ', u'プ':u'プ'}
, del_list=[u'パ', u'プ']
, debug=1)
n += 1

if __name__ == '__main__':
_test()
タグ:Unicode Python
posted by Mire at 03:03 | Comment(0) | TrackBack(0) | Pythonプログラミング | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
月額見放題1,000円開始キャンペーンバナー(画像ありver)
紺碧の艦隊 ルパン三世 GREAT CHASE クリックプロモーション
<< 2013年01月 >>
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
カテゴリ
タグクラウド
ファン
利用中のオープンソース
最近のコメント
最近の記事
過去ログ
QRコード
レガシーなアプリはいかが?
Dell 法人のお客様ページ
  • 【法人様向け】デル、お得なキャンペーン情報
  • 法人のお客様向け ストレージソリューション
  • 法人のお客様向け ネットワークソリューション
  • 【SOHO法人様向け】デル・オンライン広告限定ページ
  • デル-個人のお客様ページ
  • 【個人のお客様向け】デル・オンライン広告限定ページ
  • オンライン広告限定キャンペーンページ
  • ソフトウェア&周辺機器 パソコン工房
    ツートップインターネットショップ(twotop.co.jp) マウスコンピューター/G-Tune
  • ×

    この広告は1年以上新しい記事の投稿がないブログに表示されております。