私はカタカナとひらがなの間で変換二つの機能を持っており、彼らは同じように見える:ひらがなとカタカナを変換する2つの同様の関数を組み合わせるにはどうすればよいですか?
katakana_minus_hiragana = 0x30a1 - 0x3041 # KATAKANA LETTER A - HIRAGANA A
def is_hirgana(char):
return 0x3040 < ord(char[0]) and ord(char[0]) < 0x3097
def is_katakana(char):
return 0x30a0 < ord(char[0]) and ord(char[0]) < 0x30f7
def hiragana_to_katakana(hiragana_text):
katakana_text = ""
max_len = 0
for i, char in enumerate(hiragana_text):
if is_hirgana(char):
katakana_text += chr(ord(char) + katakana_minus_hiragana)
max_len += 1
else:
break
return katakana_text, max_len
def katakana_to_hiragana(katakana_text):
hiragana_text = ""
max_len = 0
for i, char in enumerate(katakana_text):
if is_katakana(char):
hiragana_text += chr(ord(char) - katakana_minus_hiragana)
max_len += 1
else:
break
return hiragana_text, max_len
アヒル型機能やスーパー/メタ関数にhiragana_to_katakana()
とkatakana_to_hiragana()
を簡素化する方法はありますか?
など。何かのように
def convert_hk_kh(text, charset_range, offset):
charset_start, charset_end = charset_range
output_text = ""
max_len = 0
for i, char in enumerate(text):
if charset_start < ord(char[0]) and ord(char[0]) < charset_end:
output_text += chr(ord(char) + offset)
max_len +=1
else:
break
return output_text, max_len
def katakana_to_hiragana(katakana_text):
return convert_hk_kh(katakana_text, (0x30a0, 0x30f7), -katakana_minus_hiragana)
def hiragana_to_katakana(hiragana_text):
return convert_hk_kh(hiragana_text, (0x3040, 0x3097), katakana_minus_hiragana)
非常に似ている2つの機能を単純化するために他のpythonic方法はありますか?
EDITED
str.translate
と同じことをしているようだhttps://github.com/olsgaard/Japanese_nlp_scriptsもあります。それはより効率的ですか?もっとpythonic?
あなたはORD(CHAR [0])
Sraw
はい、 'str.translate'は1のため、より効率的かつ神託である