(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가 섞여 있을 경우라는 내용을 담고 있는 test.txt 파일을 만들고 실행해보면,
한글만 extract할 수 있을까?
D:\doma\korean-word-extractor>lein run test.txt
(한 글 과 가 섞 여 있 을 경 우 만 할 수 까)
와 같이 원하던 결과를 얻게 된다.