nlp
알파벳으로 한글 쓰기 0r2#rld7lxolNJ 6rLrlN ^^-7l
codlingual
2020. 10. 27. 19:44
반응형
0r2#rld7lxolNJ 6rLrlN ^^-7l
0r2 알
#r 파
ld7lx 벳
ol 으 (왼쪽 90도 회전)
NJ 로 (왼쪽 90도 회전)
6rL 한
rlN 글 (왼쪽 90도 회전)
^^- 쓰
7l 기
ㅎㅎㅎ 억지스러운 것도 있지만
요즘 사람들은 이렇게 아이디 만든다며?!?!?!
난 영어 자판으로 해놓고 한글 쓰는뎁
파이썬으로 함수 만들었는데 웹페이지로 어떻게 만드는지 모르겠다. 엄청 어렵네
우선 한땀한땀 열심히 딕셔너리를 만들고
# 'key' : [[있는 그대로의 형태], [왼쪽으로 90도 회전한 형태], [오른쪽으로 90도 회전한 형태], [180도 회전한 형태]]
onset_dict = {
'ㄱ': [['7'], ['r'], ['_l'], ['L']],
'ㄲ': [['77'], ['F'], [], []],
'ㄴ': [['L', 'l_'], ['J', 'v', 'V', 'j', '_l'], ['r'], ['7']],
'ㄷ': [['C', 'c', '<'], ['u', 'U'], ['n'], []],
'ㄸ': [['CC', 'cc', '<<'], [], ['fl', 'Fl'], ['>>']],
'ㄹ': [['2', 'z'], ['N', 'W', 'w', 'ru'], ['ru'], ['z', 'Z']],
'ㅁ': [['17', '12', 'D'], ['D'], ['D'], ['D']],
'ㅂ' : [['ld'], [], [], ['fl', 'Fl']],
'ㅃ': [['ldld'], [], [], []],
'ㅅ': [['^', 'x'], ['<', 'c', 'x','X', 'T'], ['>', 'T', '7'], ['v',' V', 'y', 'x']],
'ㅆ': [['^^', 'xx'], [], [], ['vv', 'VV', 'yy', 'xx']],
'ㅇ': [['0', 'o', 'O'], ['0', 'o', 'O'], ['0', 'o', 'O'], ['0', 'o', 'O']],
'ㅈ' : [['z', 'Z'], ['K', 'k'], [], []],
'ㅉ': [['zz', 'ZZ'], [], [], []],
'ㅊ': [[], ['lk', 'lK'], [], []],
'ㅋ': [[], ['lr'], ['_ll'], []],
'ㅌ': [['E'], [], ['rn'], ['3']],
'ㅍ': [['#'], ['lxl'], ['lxl'], []],
'ㅎ': [['6'], ['lb', 'lp', 'lo', '1o', '|o', 'llo'], ['ql', 'or', 'dl', 'ol', 'o1', 'o|', 'oll'], ['e', 'g']] }
nucleus_dict = {
'ㅏ': [['r', 'l-'], [], [], ['-l']],
'ㅐ': [['H', 'rl', 'h'], [], [], ['rl', 'H']],
'ㅑ': [['f', 'F'], [], [], ['xl', 'Xl', 'zl', 'Zl' ]],
'ㅒ': [['lxl', 'kl', 'tl', 'fl'], [], [], ['lxl', 'kl', 'tl', 'fl']],
'ㅓ': [['-l'], [], [], ['r', 'L']],
'ㅔ': [['7l'], [], [], ['lr', 'lL']],
'ㅕ': [['xl', 'Xl', 'zl', 'Zl'], [], [], ['f', 'k']],
'ㅖ': [['xl'], [], [], ['lk', 'lf', 'lt']],
'ㅗ' : [[], ['J', '-l'], ['r'], []],
'ㅘ': [['Lr'], [], [], []],
'ㅙ': [['LH'], [], [], ['HT']],
'ㅚ': [['Ll'], [], [], ['lT']],
'ㅛ': [[], ['zl', 'Zl', '3l'], ['k', 'K', 'f', 'F'], []],
'ㅜ': [[], ['r', 'l-'], ['y', '-l'], []],
'ㅝ': [[], ['rT'], [], []],
'ㅞ': [[], [], [], []],
'ㅟ': [['7l'], [], [], []],
'ㅠ': [[], ['F', 'f', 'k', 'K'], ['zl', 'Zl', '3l'], []],
'ㅡ' : [['-'], ['l', '1', '|'], ['l', '1', '|'], ['-']],
'ㅣ' : [['l', '1', '|'], ['-'], ['_',], ['l', '1', '|']],
'ㅢ': [['-l'], ['T'], ['L'], ['l-']] }
coda_dict = {
'ㄱ': [['7'], ['r'], ['_l'], ['L']],
'ㄲ': [['77'], ['F'], [], []],
'ㄳ': [[], [], [], []],
'ㄴ': [['L', 'l_'], ['J', 'v', 'V', 'j', '_l'], ['r'], ['7']],
'ㄵ': [[], [], [], []],
'ㄶ': [[], [], [], []],
'ㄷ': [['C', 'c', '<'], ['u', 'U'], ['n'], []],
'ㄹ': [['2', 'z'], ['N', 'W', 'w', 'ru'], ['ru'], ['z', 'Z']],
'ㄺ': [['27', 'z7'], [], [], ['LZ', 'Lz']],
'ㄻ': [['212', '2D'], [], [], ['Dz', 'DZ']],
'ㄼ': [['2ld', 'zld'], [], [], ['flz', 'FlZ']],
'ㄽ': [['zx', '2X'], [], [], ['vz', 'VZ', 'yz', 'xz']],
'ㄾ': [['zE', 'ZE', '2E'], [], [], ['3z', '3Z']],
'ㄿ': [[], [], [], []],
'ㅀ': [['z6'], [], [], ['ez', 'gz']],
'ㅁ': [['17', '12', 'D'], ['D'], ['D'], ['D']],
'ㅂ': [['ld'], [], [], ['fl', 'Fl']],
'ㅄ': [['ldx'], [], [], ['vfl', 'VFl']],
'ㅅ': [['^', 'x'], ['<', 'c', 'x','X', 'T'], ['>', 'T', '7'], ['v',' V', 'y', 'x']],
'ㅆ': [['^^', 'xx'], [], [], ['vv', 'VV', 'yy', 'xx']],
'ㅇ': [['0', 'o', 'O'], ['0', 'o', 'O'], ['0', 'o', 'O'], ['0', 'o', 'O']],
'ㅈ': [['z', 'Z'], ['K', 'k'], [], []],
'ㅊ': [[], ['lk', 'lK'], [], []],
'ㅋ': [[], ['lr'], ['_ll'], []],
'ㅌ': [['E'], [], ['rn'], ['3']],
'ㅍ': [[], ['lxl'], ['lxl'], []],
'ㅎ': [['6'], ['lb', 'lp', 'lo', '1o', '|o', 'llo'], ['ql', 'or', 'dl', 'ol', 'o1', 'o|', 'oll'], ['e', 'g']] }
대충 합치면 됨
# 한 음절 -> 알파벳 상형 변환
def syl_to_alphabet(syl, explain=False):
result = []
explanation = []
explain_dict = {0: '있는 그대로의 형태', 1:'왼쪽으로 90도 회전한 형태', 2:'오른쪽으로 90도 회전한 형태', 3:'180도 회전한 형태'}
# 받침 없는 경우
if coda(syl) == 0:
on = onsets[onset(syl)]
nu = nuclei[nucleus(syl)]
# i==0 : 초성, 중성 모두 있는 그대로의 형태로 표현 가능한 경우
# i==1 : 초성, 중성 모두 왼쪽으로 90도 회전한 형태로 표현 가능한 경우
# i==2 : 초성, 중성 모두 오른쪽으로 90도 회전한 형태로 표현 가능한 경우
# i==3 : 초성, 중성 모두 180도 회전한 형태로 표현 가능한 경우
for i in range(4):
if onset_dict[on][i] != [] and nucleus_dict[nu][i] != [ ]:
for x in range(len(onset_dict[on][i])):
for y in range(len(nucleus_dict[nu][i])):
if i != 3:
result.append(onset_dict[on][i][x] + nucleus_dict[nu][i][y])
explanation.append(explain_dict[i])
# 180도 회전한 경우 초성, 종성 순서 바뀌어야 함
else:
result.append(nucleus_dict[nu][i][y] + onset_dict[on][i][x])
explanation.append(explain_dict[i])
# 받침 있는 경우
else:
on = onsets[onset(syl)]
nu = nuclei[nucleus(syl)]
co = codas[coda(syl)]
'''
ㅓㅇ = a
ㅣㄴ = L, l_
ㅕㅇ = zb
ㅏㅇ = 6
ㅕㄴ = _t
ㅣㅁ = b
ㅓㄴ = z
'''
exception = [['ㅓ', 'ㅇ', 'a'], ['ㅣ', 'ㄴ', 'L'], ['ㅕ', 'ㅇ', 'zb'], ['ㅏ', 'ㅇ', '6'], ['ㅕ', 'ㄴ', '_t'], \
['l', 'ㅁ', 'b'], ['ㅓ', 'ㄴ', 'z']]
for exc in range(len(exception)):
if nu == exception[exc][0] and co == exception[exc][1] and onset_dict[on][0] != []:
for e in range(len(onset_dict[on][0])):
result.append(onset_dict[on][0][e] + exception[exc][2])
explanation.append(explain_dict[0])
# i==0 : 초성, 중성 모두 있는 그대로의 형태로 표현 가능한 경우
# i==1 : 초성, 중성 모두 왼쪽으로 90도 회전한 형태로 표현 가능한 경우
# i==2 : 초성, 중성 모두 오른쪽으로 90도 회전한 형태로 표현 가능한 경우
# 받침 있으면 있는 그대로 또는 180도 회전 불가 (모아쓰기 불가)
for i in range(3):
if onset_dict[on][i] != [] and nucleus_dict[nu][i] != [ ] and coda_dict[co][i] != [ ]:
for x in range(len(onset_dict[on][i])):
for y in range(len(nucleus_dict[nu][i])):
for z in range(len(coda_dict[co][i])):
if i != 2:
result.append(onset_dict[on][i][x] + nucleus_dict[nu][i][y] + coda_dict[co][i][z])
explanation.append(explain_dict[i])
# 오른쪽으로 90도 회전한 경우 초성, 종성, 종성 순서 바뀌어야 함
else:
result.append(coda_dict[co][i][z] + nucleus_dict[nu][i][y] + onset_dict[on][i][x])
explanation.append(explain_dict[i])
if explain:
return pd.DataFrame(zip(result, explanation), columns=[syl, 'explanation'])
else:
return result
explain = True 하면 이런 식으로 나온다
def word_to_alphabet(word):
syls = []
for i in range(len(word)):
df = syl_to_alphabet(word[i], explain=True)
syls.append(df.iloc[:,0].tolist())
result = []
for i in map(''.join, list(itertools.product(*syls))):
result.append(i)
return result
잘 된 결과 몇 개 자랑
받침 없어야 잘 된다
0rKr = 우주 (왼쪽으로 90도 회전)
ldrLrLr = 바나나
반응형