킨들 (전자책) word wise(워드와이즈) 한글로 보기 : 클리앙

screenshot_2024_02_24T12_50_51+0900.png


저는 종이책이 차지하는 공간도 부담스럽고 페이지 넘어가지 않도록 손으로 잡고 있는 것도 싫어서 이제는 대부분의 책을 e-book으로 구매하고 있습니다.


여러 종류의 이북 리더기를 써 보았는데, 현재는 킨들을 주로 씁니다.

그 이유 중 가장 큰 것이 킨들이 word wise 기능이 있어서 인데요, 어려운 단어 위에 그 뜻을 표시해 주는 기능입니다.

킨들에서 구매한 책들은 대부분 word wise를 지원합니다.

킨들에서 산 책들 말고도, 오래된 고전 등 저작권 만료된 책들은 projedt gutenberg (https://www.gutenberg.org) 를 통해서 무료로 다운 받아서 볼 수 있고 이들도 Calibre 라는 프로그램을 이용하면 킨들 기기에서 word wise 기능을 쓸 수 있습니다.


그런데, 킨들 word wise는 기본적으로 영어로 설명을 해 주고 있어서 이걸 한글로 나오게 하면 더 보기 편하겠다는 생각을 하게 되었습니다.

물론, 영어 공부를 위해 영영사전을 많이 보아야 한다는 데에는 이견이 없습니다. 하지만 빠른 속도로 많은 책들을 읽어 나가는 데에는 대응하는 한국어 단어를 알려 주면 많은 도움이 된다 생각합니다. 설명을 위해 차지하는 공간도 한글로 표기되는 것이 훨씬 적습니다.


아래 방법을 따라 하시면 직접 word wise의 해설을 한글로 변경할 수 있습니다. 

모든 단어를 한글로 바꾸는 방법도 가능한데, 일단 본 글은 본인이 만든 단어장을 이용해 본인이 찾아 본 단어들을 다음번에 또 찾지 않아도 되게 하는 것을 설명했습니다. 그렇게 한글 word wise의 범위가 늘어가는 걸 보는 것도 꽤 독서의 동기 유발이 되더군요.


기본적으로 파이썬을 이용해 작업했으며, 파이썬에 익숙하지 않은 분들을 위해 실행 파일도 만들어 두었습니다.


방법은 킨들 기기 내에 있는 파일 하나를 변경하는 것입니다. 

킨들에서 워드와이즈 기능을 한번이라도 사용하게 되면  킨들 내의 \system\kll 폴더 아래에 kll.en.en.klld 라는 파일이 만들어 집니다. 이 파일 내에 어떤 단어가 어떤 뜻을 가지는 지가 기록되어 있습니다. 이 파일을 DB Browser for SQLite 같은 프로그램으로 열어 보면 short_def 필드가 있는데, 이 필드를 한글 정의로 바꿔주면 됩니다.


그 과정을 자동화 해주는 코드를 작성했는데, 그 전에 필요한 것들이 있습니다.

일단, 표제어와 그 정의를 담은 파일을 만들어야 합니다.

본 글에서는 본인이 찾아본 단어를 정리한 csv 파일을 이용하는 방법을 소개하겠습니다.

참고로, 단어장을 만들 때 킨들의 vocabulary builder와 kindle mate를 이용하면 본인이 찾아본 단어들을 쉽게 가져올 수 있습니다. 각 단어의 한글 정의를 자동으로 달아 주는 것도 가능한데, 그에 대해서는 다음에 기회가 되면 써 보도록 하겠습니다.


일단, 엑셀을 이용해 mydict.csv 라는 파일을 만들어 UTF-8 형식으로 저장합니다.

첫 행은 아래 그림처럼 하고(똑같지 않아도 되고, 표제어가 두번째, 정의가 네번째 열에 오기만 하면 됩니다), 세번째 행부터 표제어와 그 정의를 입력합니다. 처음 두 행은 반영되지 않습니다. E, F 열은 없어도 되고 나중에 활용을 위해 본인 수준에 맞춰 난이도 입력을 해 두어도 됩니다.

스크린샷 2024-03-29 123223.png


그리고 필요한 것이, 각 표제어에 할당된 id가 담긴 파일입니다.

다음 링크에서 wordwisecreator 를 다운받으면 wordwise-dict.csv  라는 파일이 포함되어 있습니다. 그 파일을 이용하면 됩니다.

https://github.com/xnohat/wordwise-dict/blob/master/wordwise-dict.csv 


위의 mydict.csv와  wordwise-dict.csv 두개의 파일, 그리고 킨들 \system\kll 폴더에서 kll.en.en.klld 파일을 복사해서 C:\my_wordwise 폴더에 넣어 놓고 아래 파이썬 코드를 실행시키면 kll.en.en.klld_updated  파일이 만들어집니다.


import sqlite3

import pandas as pd

import base64

import numpy as np  

import os 

import shutil


path = r'C:\my_wordwise'

original_db_filename = "kll.en.en.klld"

updated_db_filename = "kll.en.en.klld_updated"

original_db_path = os.path.join(path, original_db_filename)

backup_db_path = original_db_path + "_backup"

shutil.copyfile(original_db_path, backup_db_path)

conn = sqlite3.connect(path + '/' + original_db_filename) 

cursor = conn.cursor() 

dict_custom = pd.read_csv(path + '/' + 'mydict.csv')

print(dict_custom)

lines = dict_custom.shape[0]-1 

# dict_org = pd.read_csv(path + '/' + 'wordwise-dict.csv', index_col=1) 

dict_org = pd.read_csv(path + '/' + 'wordwise-dict.csv', index_col=1, dtype={ 'column_name': str}, low_memory=False)


results = []  

f = open(path + '/' + "wordwise-dict_for_difficulty_customize.csv", "w", encoding='utf-8')

g = open(path + '/' + "not_in_the_dict.csv", "w", encoding='utf-8') 

f.write('lemma, difficulty\n') 

for index in range(lines):

    title = dict_custom.iat[index+1, 1] 

    if pd.notna(title): 

        definition = dict_custom.iat[index+1, 3] 

        if not isinstance(definition, str):

            definition = str(definition)

        difficulty = str(dict_custom.iat[index+1, 5]) 

        b64 = base64.b64encode(definition.encode("utf-8")) 

        b64 = b64.decode('utf8')

        try: 

            id = int(dict_org.at[title, 'id'])

            cursor.execute("SELECT short_def FROM senses WHERE id=?", (id,))

            cursor.execute("UPDATE senses SET short_def=? WHERE id=?",(b64, id)) 

            cursor.execute("SELECT short_def FROM senses WHERE id=?", (id,)) 

            f.write(title + ',' + difficulty + '\n') 

        except:

            g.write(title + '\n')

            pass


f.close()

g.close()

cursor.close()

conn.commit() 

conn.close() 

updated_db_path = os.path.join(path, updated_db_filename)

os.rename(original_db_path, updated_db_path)

print()

print("--------- Finished ---------")

print()


이걸 다시 kll.en.en.klld 로 이름 바꿔서 \system\kll 폴더 아래에 덮어쓰기 하면 끝입니다. 추가로 만들어지는 not_in_the_dict.csv 파일은, 내 단어장에 있지만 킨들 word wise 사전에 들어있지 않는 단어들로, word wise 기능을 사용해도 나오지 않는 단어들의 모음입니다. 참고를 위해 생성되게 했습니다.


이렇게 kll.en.en.klld 파일을 업데이트하면 아마존에서 구입한 영문 서적의 word wise 주석이 mydict.csv 파일에 담긴 단어들에 한해서 한글로 나오게 되고, 또한 본인이 가지고 있는 파일을 Calibre의 worddumb 플러그인을 통해 킨들에 넣은 경우도 마찬가지로 적용 됩니다.


mydict.csv 파일에 있는 단어라도 word wise에 나오지 않는 경우들이 몇가지 있습니다.

가장 많은 경우는, 같은 영어단어라도 쓰임에 따라 다른 해설이 나오게 되고, 각각의 사용예마다 그 단어의 id가 따로 있는데 위에서 참조한 wordwise-dict.csv 파일에는 한 단어당 한개씩의 id만 실려 있습니다. 따라서 용례에 따라 한글 해설이 나오지 않을 수 있습니다. 이것은 모든 id가 포함된 파일을 만들어 그걸 참조하게 하면 해결 가능한 부분입니다.


글이 너무 길어져도 안 좋을 것 같아 일단 이번 글은 여기까지 하도록 하겠습니다.

제 블로그에 더 자세한 글들을 올려두었습니다.

https://blog.naver.com/beecom71/222860590993


제 블로그에 담긴 내용들은, 

- 파이썬 없이도 위 코드를 실행할 수 있도록 한 실행파일 (본 게시물에 첨부하려 했는데, 이미지 외의 파일은 첨부가 안되는군요)

- mydict.csv 파일의 예제(제가 영문 책을 읽으며 찾아본 2700여 단어와 나름 적어둔 정의가 담겨 있습니다.)

- 전체 표제어를 한글화 하는 방법

- mydict.csv 에 담기지 않은 단어들은 영어 설명도 나오지 않게 kll.en.en.klld 파일의 short_def 필드를 모두 비우는 코드

- 킨들 이외의 기기에서도 word wise를 사용하는 방법


등입니다.

사진게시판