BIBLIOGRAPHY
“Astoff/Code-Cells.El: Emacs Utilities for Code Split into Cells, Including Jupyter Notebooks.” n.d. Accessed January 28, 2025. https://github.com/astoff/code-cells.el.
Han, Jung. (2025) 2025. “Junghan0611/Ds-Book.” https://github.com/junghan0611/ds-book.
리포지토리
junghan0611/ds-book
(Han [2025] 2025)
- Han, Jung
문제
- 베르누이 분포 -> 베르누이 분포
- “주피터 노트북이나 IPython을 시작할 때마다 자동으로 패키지를 임포트하는 방법은 0.6절 ‘아이파이썬 및 주피터 설정’에서 이 책 앞부분의 스타트업 파일 설정을 참조한다.”
후처리 할 것들
- ‘ code point in charset: 0x2018
- ’ code point in charset: 0x2019
주피터 노트북이나 IPython을 시작할 때마다 자동으로 패키지를 임포트하는 방법은 0.6절 ‘‘아이파이썬 및 주피터 설정’’에서 이 책 앞부분의 스타트업 파일 설정을 참조한다.
스크린샷
>
동작 코드
현재 버퍼에서 조합형 자모를 완성형 음절로 변환합니다. 동작 잘 된다.
- my/process-files-by-extension
- .ipynb
- my/convert-hangul-jamo-to-syllable
(progn
(require 'ucs-normalize)
(defun my/convert-hangul-jamo-to-syllable ()
"Convert conjoining jamo to precomposed syllables in the current buffer."
(interactive)
(let* ((choseong "[\u1100-\u115F\uA960-\uA97C]")
(jungseong "[\u1160-\u11A7\uD7B0-\uD7C6]")
(jongseong "[\u11A8-\u11FF\uD7CB-\uD7FB]?")
(pattern (concat choseong jungseong jongseong)))
(save-excursion
(goto-char (point-min))
(while (re-search-forward pattern nil t)
(let ((start (match-beginning 0))
(end (match-end 0)))
(ucs-normalize-NFC-region start end))))))
;; 버퍼 전체에 적용하려면 다음 함수를 호출하세요:
;; (my/convert-hangul-jamo-to-syllable)
(defun my/process-files-by-extension (directory extension process-func)
"주어진 디렉토리에서 특정 확장자를 가진 파일들에 대해 처리 함수를 적용합니다."
(interactive
(list (read-directory-name "처리할 디렉토리: ")
(read-string "파일 확장자 (예: txt): ")
(intern (completing-read "처리 함수: " obarray 'functionp t))))
(dolist (file (directory-files-recursively directory (concat "\\." extension "$")))
(with-current-buffer (find-file-noselect file)
(funcall process-func)
(save-buffer)
(kill-buffer))))
)
code-cells를 끄거나 제거하고 할 것
(“Astoff/Code-Cells.El: Emacs Utilities for Code Split into Cells, Including Jupyter Notebooks” n.d.)
텍스트는 텍스트를 수정하는 것만 해야지 양식이 바뀜
@ #리터레이트 #프로그래밍 #이맥스 콰르토 주피터 여기에 기록함
2025-01-25 W03
@user 아래 글에서 폰트가 달라지는 이유는?
- 베르누이 분포, 이항 분포, 카테고리 분포, 다항 분포 등의 이산 분포와 가우시안 정규분포, 스튜던트-t 분포 카이제곱 분포, F 분포 등의 연속 분포의 정의와 특성, 그리고 이 분포들이 어떻게 데이터 분석에 쓰이는지에 대해 알아봅니다.
@assistant 글에서 폰트가 달라지는 이유에 대한 직접적인 설명은 없지만, 일반적으로 폰트가 달라지는 이유는 다음과 같습니다:
- 웹사이트의 스타일 시트 설정: 웹사이트가 특정 폰트를 지정하고, 사용자의 시스템에 해당 폰트가 설치되어 있지 않으면 기본 폰트로 변경될 수 있습니다[3].
- 사용자 시스템의 폰트 설정: 사용자의 운영체제나 브라우저 설정에 따라 기본 폰트가 다를 수 있습니다[3].
- 디자인 요소: 디자인 목적상 특정 폰트를 사용하기 위해 의도적으로 변경할 수 있습니다.
이 글에서는 이러한 이유에 대해 직접적으로 언급하지 않았습니다.
@user emacs-lisp으로 현재 버퍼에 한글 텍스트 중에서 조합형으로 표기 된 것을 완성형으로 바꿔주는 방법은?
@assistant Emacs Lisp를 사용하여 현재 버퍼에 있는 조합형 한글 텍스트를 완성형으로 변환하는 방법은 다음과 같습니다. 이 작업은 Emacs의 내장 기능을 활용하거나 외부 라이브러리를 사용하여 수행할 수 있습니다. 그러나 Emacs에서 직접적으로 조합형을 완성형으로 변환하는 내장 함수는 제공되지 않으므로, 외부 라이브러리나 시스템 명령어를 활용해야 할 수 있습니다.
1. 시스템 명령어 사용
Emacs Lisp에서 시스템 명령어를 실행하여 텍스트를 변환할 수 있습니다. 예를 들어, Linux 시스템에서 iconv
명령어를 사용하여 인코딩을 변환하는 방식으로 간접적으로 조합형을 완성형으로 변환할 수 있습니다. 하지만 이 방법은 직접적인 변환이 아니며, 시스템의 인코딩 설정에 따라 제한이 있을 수 있습니다.
(defun convert-to-composed ()
"현재 버퍼의 텍스트를 조합형에서 완성형으로 변환합니다.
이 함수는 시스템 명령어를 사용하므로, 시스템 설정에 따라 제한이 있을 수 있습니다."
(interactive)
(let ((buffer-string (buffer-string)))
(with-temp-buffer
(insert buffer-string)
(shell-command-on-region (point-min) (point-max) "iconv -f UTF-8 -t UTF-8" t)
(buffer-string))))
;; 버퍼 내용을 변환하여 새로운 버퍼에 삽입
(let ((new-buffer (generate-new-buffer "Converted Buffer")))
(with-current-buffer new-buffer
(insert (convert-to-composed)))
(switch-to-buffer new-buffer))
이 코드는 시스템 명령어를 사용하여 텍스트를 변환하지만, 조합형에서 완성형으로의 직접적인 변환은 지원하지 않습니다. 따라서 이 방법은 제한적일 수 있습니다.
2. 외부 라이브러리 사용
조합형을 완성형으로 변환하는 작업은 일반적으로 Unicode 관련 라이브러리를 사용하여 수행됩니다. Emacs에서 외부 라이브러리를 사용하려면, 해당 라이브러리가 Emacs와 호환되는지 확인해야 합니다.
현재로서는 Emacs Lisp에서 직접적으로 조합형을 완성형으로 변환하는 라이브러리나 함수는 제공되지 않는 것으로 보입니다. 따라서, 외부 명령어나 다른 프로그래밍 언어의 라이브러리를 활용하는 것이 필요할 수 있습니다.
3. Python 라이브러리 사용
예를 들어, Python의 unicodedata
라이브러리를 사용하여 조합형을 완성형으로 변환할 수 있습니다. Emacs에서 Python 스크립트를 실행하여 텍스트를 변환하는 방법도 있습니다.
import unicodedata
def convert_to_composed(text):
return unicodedata.normalize('NFC', text)
# Python 스크립트를 실행하여 변환된 텍스트를 얻는 방법
이후 Emacs Lisp에서 Python 스크립트를 실행하고 결과를 받아오는 방식으로 구현할 수 있습니다.
(defun run-python-script (text)
"Python 스크립트를 실행하여 텍스트를 변환합니다."
(let ((python-command "python -c 'import unicodedata; print(unicodedata.normalize(\"NFC\", input()))'"))
(with-output-to-string
(with-current-buffer standard-output
(shell-command python-command t)))))
;; 버퍼 내용을 변환하여 새로운 버퍼에 삽입
(let ((new-buffer (generate-new-buffer "Converted Buffer"))
(buffer-string (buffer-string)))
(with-current-buffer new-buffer
(insert (run-python-script buffer-string)))
(switch-to-buffer new-buffer))
이 방법은 Python 스크립트를 실행하여 텍스트를 변환하는 방식으로, Emacs Lisp에서 직접적으로 변환하는 것이 아니라 Python의 unicodedata
라이브러리를 활용하는 것입니다.
결론
Emacs Lisp에서 조합형을 완성형으로 변환하는 직접적인 방법은 제공되지 않으므로, 외부 라이브러리나 시스템 명령어를 활용해야 합니다. Python의 unicodedata
라이브러리를 사용하는 방법이 가장 효과적일 수 있습니다.
@user 다음은 한글의 자모를 찾아서 합쳐주는 코드의 일부야. 조합한 코드를 일치하는 완성형 코드로 변경하게 바꿔 줄래?
;; For auto-composing conjoining jamo.
(let* ((choseong "[\u1100-\u115F\uA960-\uA97C]")
(jungseong "[\u1160-\u11A7\uD7B0-\uD7C6]")
(jongseong "[\u11A8-\u11FF\uD7CB-\uD7FB]?")
(pattern (concat choseong jungseong jongseong)))
(set-char-table-range composition-function-table
'(#x1100 . #x115F)
(list (vector pattern 0 #'font-shape-gstring)))
(set-char-table-range composition-function-table
'(#xA960 . #xA97C)
(list (vector pattern 0 #'font-shape-gstring))))
@assistant 네, 주어진 코드를 조합형 한글을 완성형으로 변환하는 코드로 수정하겠습니다. 이를 위해 ucs-normalize-NFC-region
함수를 사용할 수 있습니다. 이 함수는 유니코드 정규화 형식 C(NFC)를 적용하여 조합형 문자를 완성형으로 변환합니다.
다음은 수정된 코드입니다:
(defun convert-jamo-to-syllable ()
"Convert conjoining jamo to precomposed syllables in the current buffer."
(interactive)
(let* ((choseong "[\u1100-\u115F\uA960-\uA97C]")
(jungseong "[\u1160-\u11A7\uD7B0-\uD7C6]")
(jongseong "[\u11A8-\u11FF\uD7CB-\uD7FB]?")
(pattern (concat choseong jungseong jongseong)))
(save-excursion
(goto-char (point-min))
(while (re-search-forward pattern nil t)
(let ((start (match-beginning 0))
(end (match-end 0)))
(ucs-normalize-NFC-region start end))))))
;; 버퍼 전체에 적용하려면 다음 함수를 호출하세요:
;; (convert-jamo-to-syllable)
이 코드는 다음과 같이 작동합니다:
convert-jamo-to-syllable
함수를 정의합니다.- 원래 코드에서 사용된 것과 같은 패턴을 사용하여 조합형 한글을 찾습니다.
- 버퍼 전체를 순회하면서 패턴과 일치하는 부분을 찾습니다.
- 일치하는 각 부분에 대해
ucs-normalize-NFC-region
함수를 적용하여 조합형을 완성형으로 변환합니다.
이 함수를 실행하려면, Emacs에서 =M-x convert-jamo-to-syllable=를 입력하거나 Lisp 코드에서 =(convert-jamo-to-syllable)=을 호출하면 됩니다.
주의사항:
- 이 방법은 유니코드 정규화를 사용하므로, 대부분의 경우에 잘 작동하지만, 모든 가능한 조합을 완벽하게 처리하지 못할 수 있습니다.
- 이 함수는 버퍼의 내용을 직접 수정하므로, 중요한 데이터에 적용하기 전에 백업을 만들거나 테스트 버퍼에서 먼저 시도해보는 것이 좋습니다.
@user ucs-normalize-NFC-region 함수로 알려줄래?
@assistant ucs-normalize-NFC-region
함수는 Emacs의 ucs-normalize.el
파일에 정의된 함수입니다. 이 함수는 지정된 영역의 텍스트를 유니코드 정규화 형식 C(NFC)로 변환합니다[1][3].
주요 특징:
- 버퍼의 특정 영역(FROM에서 TO까지)을 정규화합니다.
- 조합형 문자를 해당하는 완성형 문자로 변환합니다.
- 정규화 과정에서 문자의 순서를 조정하고 불필요한 조합 문자를 제거합니다.
이 함수를 사용하면 한글 조합형 문자를 완성형으로 쉽게 변환할 수 있습니다.
@user 잘 동작한다. 디렉토리와 확장자를 선택해서 일괄 처리하도록 하는 함수를 하나 만들어 줄래?
@assistant 네, 디렉토리와 확장자를 선택하여 일괄 처리하는 함수를 만들어 드리겠습니다. 다음은 그러한 기능을 하는 Emacs Lisp 함수입니다:
(defun process-files-by-extension (directory extension process-func)
"주어진 디렉토리에서 특정 확장자를 가진 파일들에 대해 처리 함수를 적용합니다."
(interactive
(list (read-directory-name "처리할 디렉토리: ")
(read-string "파일 확장자 (예: .txt): ")
(intern (completing-read "처리 함수: " obarray 'functionp t))))
(dolist (file (directory-files-recursively directory (concat "\\." extension "$")))
(with-current-buffer (find-file-noselect file)
(funcall process-func)
(save-buffer)
(kill-buffer))))
이 함수는 다음과 같이 작동합니다:
- 사용자에게 디렉토리, 파일 확장자, 그리고 적용할 처리 함수를 입력받습니다.
- 지정된 디렉토리에서 주어진 확장자를 가진 모든 파일을 찾습니다.
- 각 파일에 대해 버퍼를 열고, 지정된 처리 함수를 적용한 후, 저장하고 버퍼를 닫습니다.
이 함수를 사용하려면 =M-x process-files-by-extension=을 실행하고 프롬프트에 따라 입력하면 됩니다.
@user Convert conjoining jamo to precomposed syllables in the current buffer 이 영어 문장을 한글로 번역해줘
@assistant 네, 영어 문장을 한글로 번역해 드리겠습니다. 번역할 영어 문장을 입력해 주세요.
@user Convert conjoining jamo to precomposed syllables in the current buffer.
@assistant 현재 버퍼에서 조합형 자모를 완성형 음절로 변환합니다.
@user