이제 파이썬으로 입력기를 작성해 봅시다.

 

1
2
3
4
5
import xlrd
 
def word_convert(word, kana = "HIRA"):
    book = xlrd.open_workbook("words-book2.xlsx")
    book_sheet = book.sheet_by_name("1")
cs

이 프로그램은 xlrd라는 엑셀파일을 불러오는 기능을 수행하는 모듈 하나만 사용합니다. 그리고 함수형으로 만들어 봅니다. 함수에 들어가는 인자는 바꾸고 싶은 문자열이 당연히 들어가야 할 것이고 그 다음은 히라가나/가타가나 구분자로 기본값을 kana = "HIRA"로 주어 아무 값을 입력하지 않았을 때는 히라가나로 변환될 수 있도록 설정해 둡니다.

 

그다음 xlrd의 open_workbook으로 파일을 불러와 book이라는 변수로 저장을 하고 이어서 sheet_by_name으로 시트명이 "1"인 시트를 불러옵니다. 이로서 book_sheet라는 원하는 한국어 - 일본어 대응표를 불러왔습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    list_kor1 = []
    list_kor = []
    list_hira = []
    list_kata = []
 
    for raw in range(0,book_sheet.nrows):
        for col in range(0,4):
            if book_sheet.cell_value(raw, col) != '':
                list_kor1.append(book_sheet.cell_value(raw, col))
        list_kor.append(list_kor1)
        list_kor1 = []
 
    for raw in range(0, book_sheet.nrows):
        list_hira.append(book_sheet.cell_value(raw, 4))
    
    for raw in range(0, book_sheet.nrows):
        list_kata.append(book_sheet.cell_value(raw, 5))
cs

이제 이어서 한국어 리스트와 일본어 리스트를 만듭니다.

 

한국어 리스트의 경우 하나의 행에 들어가는 4개의 값(물론 빈 칸이 많지만)에 대한 리스트를 만들고(list_kor1), 이어서 각 값들이 들어있는 리스트들의 큰 리스트를 만들어 줍니다. 위 코드의 if문에서 볼 수 있듯이 빈칸이 아닐 경우에만 리스트에 추가하고 결과는 다음과 같습니다.

 

[['아'], ['카', '까'], ['사'], ['타', '따'], ['나'], ['하'], ['마'], ['야'], ['라'], ['와'], ['가'], ['자'], ['다'], ['바'], ['파', '빠'], ['캬', '꺄'], ['샤'], ['챠'], ['냐'], ['햐'], ['먀'], ['랴'], ['갸'], ['쟈'], ['뱌'], ['퍄', '뺘'], ['이'], ['키', '끼'], ['시'], ['치', '찌'], ['니'], ['히'], ['미'], ['리'], ['기'], ['지'], ['디'], ['비'], ['피', '삐'], ['우'], ['쿠', '꾸'], ['스', '수'], ['쯔', '츠'], ['누', '느'], ['후', '흐'], ['무', '므'], ['유'], ['루'], ['구', '그'], ['주', '즈'], ['두', '드'], ['부', '브'], ['푸', '프', '뿌', '쁘'], ['큐', '뀨'], ['슈'], ['츄', '쮸'], ['뉴'], ['휴'], ['뮤'], ['류'], ['규'], ['쥬'], ['뷰'], ['퓨', '쀼'], ['에'], ['케', '께'], ['세'], ['테', '떼'], ['네'], ['헤'], ['메'], ['레'], ['게'], ['제'], ['데'], ['베'], ['페', '뻬'], ['오'], ['코', '꼬'], ['소'], ['토', '또'], ['노'], ['호'], ['모'], ['요'], ['로'], ['고'], ['조'], ['도'], ['보'], ['포', '뽀'], ['쿄'], ['쇼'], ['쵸'], ['뇨'], ['효'], ['묘'], ['료'], ['교'], ['죠'], ['뵤'], ['표'], ['앗', '앋'], ['캇', '칻', '깟', '깓'], ['삿', '삳'], ['탓', '탇', '땃', '딷'], [' 낫', '낟'], ['핫', '핟'], ['맛', '맏'], ['얏', '얃'], ['랏', '랃'], ['왓', '왇'], ['갓', '갇'], ['잣', '잗'], ['닷', '닫'], ['밧', '받'], ['팟', '팓', '빳', '빧'], ['캿', '캳', '꺗', '꺋'], ['샷', '샫'], ['챳', '챧', '짯', '짣'], ['냣', '냗'], ['햣', '햗'], ['먓', '먇'], ['럇', '랻'], ['걋', '갿'], ['쟛', '쟏'], ['뱟', '뱓'], ['퍗', '퍋'], ['잇', '읻'], ['킷', '킫', '낏', '낃'], ['싯', '싣'], ['칫', '칟', '찟', '찓'], ['닛', '닏'], ['힛', '힏'], ['밋', '믿'], ['릿', '릳'], ['깃', '긷'], ['짓', '짇'], ['딧', '딛'], ['빗', '빋'], ['핏', '핃', '삣', '삗'], ['웃', '욷'], ['쿳', '쿧'], ['슷', '슫'], ['쯧', '쯛'], ['눗', '눋'], ['훗', '훋'], ['뭇', '묻'], ['윳', '윧'], ['룻', '룯'], ['굿', '굳'], ['즛', '즏'], ['듯', '듣'], ['붓', '붇'], ['풋', '푿', '뿟', '뿓'], ['큣', '큗', '뀻', '뀯'], ['슛', '슏'], ['츗', '츋', '쯋', '쮿'], ['늇', '뉻'], ['흇', '휻'], ['뮷', '뮫'], ['륫', '륟'], ['귯', '귣'], ['쥿', '쥳'], ['븃', '뷷'], ['퓻', '퓯'], ['엣', '엗'], ['켓', '켇'], ['셋', '섿'], ['텟', '텓'], ['넷', '넫'], ['헷', '헫'], ['멧', '멛'], ['렛', '렏'], ['겟', '겓'], ['젯', '젣'], ['뎃', '덷'], ['벳', '벧'], ['펫', '펟', '뻿', '뻳'], ['옷', '옫'], ['콧', '콛', '꼿', '꼳'], ['솟', '솓'], ['톳', '톧', '똣', '똗'], ['놋', '녿'], ['홋', '혿'], ['못', '몯'], ['욧', '욛'], ['롯', '롣'], ['곳', '곧'], ['좃', '졷'], ['돗', '돋'], ['봇', '볻'], ['폿', '폳'], ['쿗', '쿋', '꾯', '꾣'], ['숏', '숃'], ['춋', '쵿', '쬿', '쬳'], ['뇻', '뇯'], ['횻', '횯'], ['묫', '묟'], ['룟', '룓'], ['굣', '굗'], ['죳', '죧'], ['뵷', '뵫'], ['푯', '푣', '뿃', '뾷'], ['안', '앙'], ['칸', '캉', '깐', '깡'], ['산', '상'], ['탄', '탕', '딴', '땅'], ['난', '낭'], ['한', '항'], ['만', '망'], ['얀', '양'], ['란', '량'], ['완', '왕'], ['간', '강'], ['잔', '장'], ['단', '당'], ['반', '방'], ['판', '팡', '빤', '빵'], ['캰', '컁', '꺈', '꺙'], ['샨', '샹'], ['챤', '챵'], ['냔', '냥'], ['햔', '향'], ['먄', '먕'], ['랸', '량'], ['갼', '걍'], ['쟌', '쟝'], ['뱐', '뱡'], ['퍈', '퍙', '뺜', '뺭'], ['인', '잉'], ['킨', '킹', '낀', '낑'], ['신', '싱'], ['찐', '찡', '친', '칭'], ['닌', '닝'], ['힌', '힝'], ['민', '밍'], ['린', '링'], ['긴', '깅'], ['진', '징'], ['딘', '딩'], ['빈', '빙'], ['핀', '핑', '삔', '삥'], ['운', '웅'], ['쿤', '쿵', '꾼', '꿍'], ['슨', '승', '순', '숭'], ['쯘', '쯩'], ['는', '능', '눈', '눙'], ['훈', '훙', '흔', '흥'], ['문', '뭉', '믄', '믕'], ['윤', '융'], ['룬', '룽', '른', '릉'], ['군', '궁'], ['즌', '증'], ['든', '등'], ['분', '붕', '븐', '븡'], ['푼', '풍', '뿐', '뿡'], ['큔', '큥', '뀬', '뀽'], ['슌', '슝'], ['츈', '츙', '쮼', '쯍'], ['뉸', '늉'], ['휸', '흉'], ['뮨', '뮹'], ['륜', '륭'], ['균', '귱'], ['쥰', '즁'], ['뷴', '븅'], ['퓬', '퓽', '쁀', '쁑'], ['엔', '엥'], ['켄', '켕'], ['센', '셍'], ['텐', '텡', '뗀', '뗑'], ['넨', '넹'], ['헨', '헹'], ['멘', '멩'], ['렌', '렝'], ['겐', '겡'], ['젠', '젱'], ['덴', '뎅'], ['벤', '벵'], ['펜', '펭', '뻰', '뼁'], ['온', '옹'], ['콘', '콩', '꼰', '꽁'], ['손', '송'], ['톤', '통', '똔', '똥'], ['논', '농'], ['혼', '홍'], ['몬', '몽'], ['욘', '용'], ['론', '롱'], ['곤', '공'], ['존', '종'], ['돈', '동'], ['본', '봉'], ['폰', '퐁', '뽄', '뽕'], ['쿈', '쿙', '꾠', '꾱'], ['숀', '숑'], ['쵼', '춍', '쬰', '쭁'], ['뇬', '뇽'], ['횬', '횽'], ['묜', '묭'], ['룐', '룡'], ['굔', '굥'], ['죤', '죵'], ['뵨', '뵹'], ['푠', '푱'], ['화'], ['휘'], ['훠'], ['훼'], ['봐'], ['뷔'], ['붜'], ['붸'], ['위'], ['워'], ['웨'], ['티'], ['뎨'], ['ㅗ'], ['ㅡ', '-'], [' '], ['.']]

 

(하나의 큰 리스트 안에 무수한 리스트들이 있습니다.)

 

그 다음 이어서 일본어 히라가나, 가타가나의 리스트를 각각 만듧니다. 그리고 세개의 리스트를 비교해 보면, 

 

  • list_kor[0] = ['아']
  • list_hira[0] = あ
  • list_kata[0] = ア

가 됩니다. 그래서 내가 입력한 음절이 list_kor 리스트의 n번째 (요소)리스트 안에 있다면 list_hira 나 list_kata의 n번째 값으로 변환해주는 원리입니다. Open api를 이것 저것 사용하게 되면 딕셔너리나 리스트의 내가 원하는 값만 뽑아내는 수없이 많이 사용하는 기능인 듯 합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    word_list = list(word)
 
    converted_word = []
 
    for syl in word_list:
        if kana == "HIRA":
            for i in range(0,len(list_kor)):
                if syl in list_kor[i]:
                    converted_word.append(list_hira[i])
        elif kana == "KATA":
            for i in range(0,len(list_kor)):
                if syl in list_kor[i]:
                    converted_word.append(list_kata[i])
 
    final_converted_word = "".join(converted_word)
 
    return final_converted_word
cs

이제 한국어를 일본어를 변환하는 일만 남았습니다.

 

일단 입력한 문자열을 ['문', '자', '열']로 만들어주기 위해 list를 함수를 적용합니다. 그리고 최종 결과물이 나올 빈 리스트'converterd_word'를 하나 만들어 놓습니다.

 

그 다음 for 구문을 이용하여 내가 입력한 문자열의 각 음절들을 반복시키고,

 

히라가나/가타가나 구분에 따라 다시 list_kor에 들어있는 작은 리스트들의 개수 i번 만큼 반복해 줍니다. 만약 i번째 작은 리스트 안에 내가 입력한 문자열의 음절이 있으면 히라가나의 i번째 일본어를 converted_word 안에 추가해 줍니다.

 

결과물은 각 일본어 음절들을 가진 리스트이기 때문에 join기능으로 단순 문자열(string)으로 만들어주고 return으로 변환해 줍니다.

 

제대로 작동하는지 확인하기 위하여 맨 아래 print(word_convert("오하요우""KATA")) 를 입력해보면

オハヨウ

로 제대로 작동하는 것을 확인할 수 있습니다.

 

converter.py
0.00MB

앞 포스트의 엑셀파일과 위 파이썬 파일을 올려두었습니다.

+ Recent posts