Search

'Language/Clojure'에 해당되는 글 1건

  1. 2011.10.14 텍스트 파일에서 한글 글자만 뽑아내기 by Clojure

텍스트 파일에서 한글 글자만 뽑아내기 by Clojure

Language/Clojure 2011. 10. 14. 12:47 Posted by 알 수 없는 사용자
해결하고자 하는 문제는 텍스트 파일에서 한글 글자만 뽑아내는 것이다. 문서에 "한글은 영어로 Korean이라 합니다."라는 내용이 있다면 (한 글 은 영 어 로 이 라 합 니 다) 라고 뽑아내고 싶다는 것. 그리고 글자의 중복이 있으면 제거한다.  위 예제에는 중복이 없다. 코드는 아주 간단하다.
(ns korean-word-extractor.core
  (:gen-class))

(defn -main [& args]
  (let [file-name (first args)
        file-contents (slurp file-name)
        korean-chars (distinct (filter #(<= 0xAC00 (int %) 0xD7AF) (seq file-contents)))] ;; 0xAC00 ~ 0xD7AF: Hangul Range
    (println korean-chars)))
파일명은 argument로 받기로 하고, slurp을 이용해 모든 내용을 일단 얻어온다. 그 다음 한 줄의 코드가 사실 모든 일을 다 하게 되는데, 과정은 다음과 같다.
  • 우선 clojure에서는 문자열에 seq 함수를 적용하면 바로 개별 문자를 list로 활용할 수 있다.
  • 그 다음 한글을 필터링 해야 되는데 filter 함수를 사용할 수 있다. 0xAC00 ~ 0XD7AF는 Unicode의 한글 음절 범위이다. Unicode.org의 Hangul Syllables 문서를 보면 잘 나와있다.
  • 한글 문자만 뽑아내는데 성공했으니 중복된 문자를 제거하면 된다. distinct 함수를 활용하자.
문제가 해결되었다.
한글과 English가 섞여 있을 경우
한글만 extract할 수 있을까?
라는 내용을 담고 있는 test.txt 파일을 만들고 실행해보면,
>lein run test.txt
(한 글 과 가 섞 여 있 을 경 우 만 할 수 까)
와 같이 원하던 결과를 얻게 된다.