나는 가타카나와 히라가나 사이의 변환 두 가지 기능을 가지고 있고 그들은 같은 모양 :히라가나와 카타카나로 변환하는 두 가지 유사한 기능을 결합하는 방법은 무엇입니까?
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()
을 단순화 할 수있는 방법이 있나요?
예. something like
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)
매우 유사한 두 가지 기능을 단순화하는 다른 파이썬 방법이 있습니까?
편집을 할
str.translate
과 같은 일을 할 것으로 보인다 https://github.com/olsgaard/Japanese_nlp_scripts도있다. 그게 더 효율적입니까? 더 파이톤?
당신은'charset_start
Sraw
예,'str.translate'가 1보다 효율적이고 파이썬입니다 : 문자의 1 번역. –