├── .gitignore ├── README.md └── cnvk.py /.gitignore: -------------------------------------------------------------------------------- 1 | *.py[co] 2 | 3 | # Packages 4 | *.egg 5 | *.egg-info 6 | dist 7 | build 8 | eggs 9 | parts 10 | bin 11 | var 12 | sdist 13 | develop-eggs 14 | .installed.cfg 15 | 16 | # Installer logs 17 | pip-log.txt 18 | 19 | # Unit test / coverage reports 20 | .coverage 21 | .tox 22 | 23 | #Translations 24 | *.mo 25 | 26 | #Mr Developer 27 | .mr.developer.cfg 28 | 29 | .project 30 | .pydevproject 31 | .settings/ 32 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | cnvk 2 | ==== 3 | 4 | Python で全角・半角・ひらがな・カタカナ等を変換する 5 | 6 | 変換マップを指定して、文字列を変換します。 7 | 追加の変換マップを dict や tuple で簡単に利用できます。 8 | 処理をスキップする文字を指定することが出来ます。 9 | 10 | args: 11 | text: 変換元のテキスト。unicode を必要とします。 12 | maps: 変換マップの指定。tuple, dict または tuple を返す関数(callable オブジェクト)で指定。 13 | マップは指定された順序に実行されます。 14 | skip: 変換しない除外文字の指定。tuple または文字列で指定 15 | tuple で指定すると各要素を除外。文字列で指定すると含まれる全ての文字を除外。 16 | return: 17 | converted unicode string 18 | 19 | built-in maps: 20 | H_SPACE (HS): スペースを半角に統一 21 | H_NUM (HN): 数字を半角に統一 22 | H_ALPHA (HA): 英字を半角に統一 23 | H_KIGO (HKG): ASCII記号を半角に統一 24 | H_KATA (HK): カタカナを半角カタカナに統一 25 | H_ASCII (HAC): アスキー文字を半角に統一(スペースを除く)(=H_NUM + H_ALPHA + H_KIGO) 26 | Z_SPACE (ZS): スペースを全角に統一 27 | Z_NUM (ZN): 数字を全角に統一 28 | Z_ALPHA (ZA): 英字を全角に統一 29 | Z_KIGO (ZKG): ASCII記号を全角に統一 30 | Z_KATA (ZK): カタカナを全角に統一 31 | Z_ASCII (ZAC): アスキー文字を全角に統一(スペースを除く)(=Z_NUM + Z_ALPHA + Z_KIGO) 32 | HIRA2KATA (H2K): ひらがなをカタカナに変換 33 | KATA2HIRA (K2H): カタカナをひらがなに変換 34 | 35 | -------------------------------------------------------------------------------- /cnvk.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | cnvk 0.9.4 - 全角・半角・ひらがな・カタカナ等を変換する簡単なモジュールです 5 | 6 | Author: 7 | yuka2py 8 | 9 | Lisence: 10 | Artistic License 2.0 11 | 12 | Usage: 13 | import cnvk 14 | text = cnvk.convert(text, cnvk.H_ALPHA, cnvk.H_NUM) #英数字を半角に変換 15 | text = cnvk.convert(text, cnvk.H_ALPHA, cnvk.H_NUM, {u"-":u"-"}) #追加の変換を dict で指示 16 | text = cnvk.convert(text, cnvk.HIRA2KATA, cnvk.H_KATA) #ひらがなも含め、半角カタカナに変換 17 | text = cnvk.convert(text, cnvk.Z_KATA, cnvk.KATA2HIRA) #カタカナも含め、全角ひらがなに変換 18 | text = cnvk.convert(text, cnvk.HAC, skip=u"$&") #u"$" と u"&" 以外の ASCII 文字を半角に変換 19 | """ 20 | 21 | def convert(text, *maps, **ops): 22 | """ 変換マップを指定して、文字列を変換します。 23 | 追加の変換マップを dict や tuple で簡単に利用できます。 24 | 処理をスキップする文字を指定することが出来ます。 25 | 26 | args: 27 | text: 変換元のテキスト。unicode を必要とします。 28 | maps: 変換マップの指定。tuple, dict または tuple を返す関数(callable オブジェクト)で指定。 29 | マップは指定された順序に実行されます。 30 | skip: 変換しない除外文字の指定。tuple または文字列で指定 31 | tuple で指定すると各要素を除外。文字列で指定すると含まれる全ての文字を除外。 32 | return: 33 | converted unicode string 34 | 35 | built-in maps: 36 | H_SPACE (HS): スペースを半角に統一 37 | H_NUM (HN): 数字を半角に統一 38 | H_ALPHA (HA): 英字を半角に統一 39 | H_KIGO (HKG): ASCII記号を半角に統一 40 | H_KATA (HK): カタカナを半角カタカナに統一 41 | H_ASCII (HAC): アスキー文字を半角に統一(スペースを除く)(=H_NUM + H_ALPHA + H_KIGO) 42 | Z_SPACE (ZS): スペースを全角に統一 43 | Z_NUM (ZN): 数字を全角に統一 44 | Z_ALPHA (ZA): 英字を全角に統一 45 | Z_KIGO (ZKG): ASCII記号を全角に統一 46 | Z_KATA (ZK): カタカナを全角に統一 47 | Z_ASCII (ZAC): アスキー文字を全角に統一(スペースを除く)(=Z_NUM + Z_ALPHA + Z_KIGO) 48 | HIRA2KATA (H2K): ひらがなをカタカナに変換 49 | KATA2HIRA (K2H): カタカナをひらがなに変換 50 | """ 51 | if "skip" in ops: 52 | skip = ops["skip"] 53 | if isinstance(skip, basestring): 54 | skip = tuple(skip) 55 | def replace(text, fr, to): 56 | return text if fr in skip else text.replace(fr, to) 57 | else: 58 | def replace(text, fr, to): 59 | return text.replace(fr, to) 60 | 61 | for m in maps: 62 | if callable(m): 63 | m = m() 64 | elif isinstance(m, dict): 65 | m = m.items() 66 | for fr, to in m: 67 | text = replace(text, fr, to) 68 | 69 | return text 70 | 71 | H_SPACE = HS = ((u" ", u" "),) 72 | H_NUM = HN = ( 73 | (u"0", u"0"), (u"1", u"1"), (u"2", u"2"), (u"3", u"3"), (u"4", u"4"), 74 | (u"5", u"5"), (u"6", u"6"), (u"7", u"7"), (u"8", u"8"), (u"9", u"9"), 75 | ) 76 | H_ALPHA = HA = ( 77 | (u"a", u"a"), (u"b", u"b"), (u"c", u"c"), (u"d", u"d"), (u"e", u"e"), 78 | (u"f", u"f"), (u"g", u"g"), (u"h", u"h"), (u"i", u"i"), (u"j", u"j"), 79 | (u"k", u"k"), (u"l", u"l"), (u"m", u"m"), (u"n", u"n"), (u"o", u"o"), 80 | (u"p", u"p"), (u"q", u"q"), (u"r", u"r"), (u"s", u"s"), (u"t", u"t"), 81 | (u"u", u"u"), (u"v", u"v"), (u"w", u"w"), (u"x", u"x"), (u"y", u"y"), (u"z", u"z"), 82 | (u"A", u"A"), (u"B", u"B"), (u"C", u"C"), (u"D", u"D"), (u"E", u"E"), 83 | (u"F", u"F"), (u"G", u"G"), (u"H", u"H"), (u"I", u"I"), (u"J", u"J"), 84 | (u"K", u"K"), (u"L", u"L"), (u"M", u"M"), (u"N", u"N"), (u"O", u"O"), 85 | (u"P", u"P"), (u"Q", u"Q"), (u"R", u"R"), (u"S", u"S"), (u"T", u"T"), 86 | (u"U", u"U"), (u"V", u"V"), (u"W", u"W"), (u"X", u"X"), (u"Y", u"Y"), (u"Z", u"Z"), 87 | ) 88 | H_KIGO = HKG = ( 89 | (u".", u"."), (u",", u","), (u"!", u"!"), (u"?", u"?"), (u"”", u'"'), 90 | (u"’", u"'"), (u"‘", u"`"), (u"@", u"@"), (u"_", u"_"), (u":", u":"), 91 | (u";", u";"), (u"#", u"#"), (u"$", u"$"), (u"%", u"%"), (u"&", u"&"), 92 | (u"(", u"("), (u")", u")"), (u"‐", u"-"), (u"=", u"="), (u"*", u"*"), 93 | (u"+", u"+"), (u"-", u"-"), (u"/", u"/"), (u"<", u"<"), (u">", u">"), 94 | (u"[", u"["), (u"¥", u"\\"), (u"]", u"]"), (u"^", u"^"), (u"{", u"{"), 95 | (u"|", u"|"), (u"}", u"}"), (u"~", u"~") 96 | ) 97 | H_KATA = HK = ( 98 | (u"ァ", u"ァ"), (u"ィ", u"ィ"), (u"ゥ", u"ゥ"), (u"ェ", u"ェ"), (u"ォ", u"ォ"), 99 | (u"ッ", u"ッ"), (u"ャ", u"ャ"), (u"ュ", u"ュ"), (u"ョ", u"ョ"), 100 | (u"ガ", u"ガ"), (u"ギ", u"ギ"), (u"グ", u"グ"), (u"ゲ", u"ゲ"), (u"ゴ", u"ゴ"), 101 | (u"ザ", u"ザ"), (u"ジ", u"ジ"), (u"ズ", u"ズ"), (u"ゼ", u"ゼ"), (u"ゾ", u"ゾ"), 102 | (u"ダ", u"ダ"), (u"ヂ", u"ヂ"), (u"ヅ", u"ヅ"), (u"デ", u"デ"), (u"ド", u"ド"), 103 | (u"バ", u"バ"), (u"ビ", u"ビ"), (u"ブ", u"ブ"), (u"ベ", u"ベ"), (u"ボ", u"ボ"), 104 | (u"パ", u"パ"), (u"ピ", u"ピ"), (u"プ", u"プ"), (u"ペ", u"ペ"), (u"ポ", u"ポ"), 105 | (u"ヴ", u"ヴ"), 106 | (u"ア", u"ア"), (u"イ", u"イ"), (u"ウ", u"ウ"), (u"エ", u"エ"), (u"オ", u"オ"), 107 | (u"カ", u"カ"), (u"キ", u"キ"), (u"ク", u"ク"), (u"ケ", u"ケ"), (u"コ", u"コ"), 108 | (u"サ", u"サ"), (u"シ", u"シ"), (u"ス", u"ス"), (u"セ", u"セ"), (u"ソ", u"ソ"), 109 | (u"タ", u"タ"), (u"チ", u"チ"), (u"ツ", u"ツ"), (u"テ", u"テ"), (u"ト", u"ト"), 110 | (u"ナ", u"ナ"), (u"ニ", u"ニ"), (u"ヌ", u"ヌ"), (u"ネ", u"ネ"), (u"ノ", u"ノ"), 111 | (u"ハ", u"ハ"), (u"ヒ", u"ヒ"), (u"フ", u"フ"), (u"ヘ", u"ヘ"), (u"ホ", u"ホ"), 112 | (u"マ", u"マ"), (u"ミ", u"ミ"), (u"ム", u"ム"), (u"メ", u"メ"), (u"モ", u"モ"), 113 | (u"ヤ", u"ヤ"), (u"ユ", u"ユ"), (u"ヨ", u"ヨ"), 114 | (u"ラ", u"ラ"), (u"リ", u"リ"), (u"ル", u"ル"), (u"レ", u"レ"), (u"ロ", u"ロ"), 115 | (u"ワ", u"ワ"), (u"ヲ", u"ヲ"), (u"ン", u"ン"), 116 | (u"。", u"。"), (u"、", u"、"), (u"゛", u"゙"), (u"゜", u"゚"), 117 | (u"「", u"「"), (u"」", u"」"), (u"・", u"・"), (u"ー", u"ー"), 118 | ) 119 | HIRA2KATA = ( 120 | (u"ぁ", u"ァ"), (u"ぃ", u"ィ"), (u"ぅ", u"ゥ"), (u"ぇ", u"ェ"), (u"ぉ", u"ォ"), 121 | (u"っ", u"ッ"), (u"ゃ", u"ャ"), (u"ゅ", u"ュ"), (u"ょ", u"ョ"), 122 | (u"が", u"ガ"), (u"ぎ", u"ギ"), (u"ぐ", u"グ"), (u"げ", u"ゲ"), (u"ご", u"ゴ"), 123 | (u"ざ", u"ザ"), (u"じ", u"ジ"), (u"ず", u"ズ"), (u"ぜ", u"ゼ"), (u"ぞ", u"ゾ"), 124 | (u"だ", u"ダ"), (u"ぢ", u"ヂ"), (u"づ", u"ヅ"), (u"で", u"デ"), (u"ど", u"ド"), 125 | (u"ば", u"バ"), (u"び", u"ビ"), (u"ぶ", u"ブ"), (u"べ", u"ベ"), (u"ぼ", u"ボ"), 126 | (u"ぱ", u"パ"), (u"ぴ", u"ピ"), (u"ぷ", u"プ"), (u"ぺ", u"ペ"), (u"ぽ", u"ポ"), 127 | (u"ヴ", u"ヴ"), 128 | (u"あ", u"ア"), (u"い", u"イ"), (u"う", u"ウ"), (u"え", u"エ"), (u"お", u"オ"), 129 | (u"か", u"カ"), (u"き", u"キ"), (u"く", u"ク"), (u"け", u"ケ"), (u"こ", u"コ"), 130 | (u"さ", u"サ"), (u"し", u"シ"), (u"す", u"ス"), (u"せ", u"セ"), (u"そ", u"ソ"), 131 | (u"た", u"タ"), (u"ち", u"チ"), (u"つ", u"ツ"), (u"て", u"テ"), (u"と", u"ト"), 132 | (u"な", u"ナ"), (u"に", u"ニ"), (u"ぬ", u"ヌ"), (u"ね", u"ネ"), (u"の", u"ノ"), 133 | (u"は", u"ハ"), (u"ひ", u"ヒ"), (u"ふ", u"フ"), (u"へ", u"ヘ"), (u"ほ", u"ホ"), 134 | (u"ま", u"マ"), (u"み", u"ミ"), (u"む", u"ム"), (u"め", u"メ"), (u"も", u"モ"), 135 | (u"や", u"ヤ"), (u"ゆ", u"ユ"), (u"よ", u"ヨ"), 136 | (u"ら", u"ラ"), (u"り", u"リ"), (u"る", u"ル"), (u"れ", u"レ"), (u"ろ", u"ロ"), 137 | (u"わ", u"ワ"), (u"を", u"ヲ"), (u"ん", u"ン"), 138 | ) 139 | 140 | Z_SPACE = ZS = ((u" ", u" "),) 141 | Z_NUM = ZN = lambda: ((h, z) for z, h in H_NUM) 142 | Z_ALPHA = ZA = lambda: ((h, z) for z, h in H_ALPHA) 143 | Z_KIGO = ZKG = lambda: ((h, z) for z, h in H_KIGO) 144 | Z_KATA = ZK = lambda: ((h, z) for z, h in H_KATA) 145 | KATA2HIRA = lambda: ((k, h) for h, k in HIRA2KATA) 146 | H_ASCII = HAC = lambda: ((fr, to) for m in (H_ALPHA, H_NUM, H_KIGO) for fr, to in m) 147 | Z_ASCII = ZAC = lambda: ((h, z) for z, h in H_ASCII()) 148 | --------------------------------------------------------------------------------