유니코드 한글 자소 분리모듈에 대한 설명을 conv2님의 도움을 받아서 분석을 하고 음소분리정보테이블을 추가해서 Jaso클래스를 만들었다.
그런데 이뿐만 아니라 음소에서 음절로 만들어지는 메서드가 있어야함을 느껴서(실제 빈번하게 쓰인다.) 만들고자 했는데
전에 포스팅한 유니코드 생성 원리 포스팅에 쓴 함수를 적용하기 위해서는 음소정보를 이용한 인덱스 번호 추출이 필요했다.
한 글자의 유니코드 값 계산 법
= 0xAC00(유니코드 한글 시작점) + [초성번호]*588 + [중성번호]*28 + [종성번호]
식은 위와 같다.
음소별로 해싱을 구현하면 편하긴 하지만 빠르게 하기 위해서 식에 쓰이는 ‘초성번호’, ‘중성번호’, ‘종성번호’에 대한 랜덤 엑세스를 위해 역색인을 만들어 버렸다.(음절정보테이블을 만들때보다는 훨씬 편하게 만들었다. 역시 한번쓰고 버릴 코드니 Python으로 쓱싹~~~ ㅋ)
색인테이블을 어떻게 구성했는지는 번호 테이블을 잘 보면 알 수 있다.
간단히 정리하면
1. 테이블의 인덱스와 유니코드를 유니코드를 키로 하고 인덱스 번호로 하는 사전으로 만든다.
2. 0x3131에서부터 0x314e까지의 테이블을 만들고 그 맵핑된곳에 인덱스 번호를 넣는다.(중성은 대역이 좀 다르다.)
3. 적절한 타협… 0x0000처리 또한 음소정보 테이블에 나오지 않는것들은 -1을 입력한다든지….
물론 만들면서 색인테이블까지 구현할 필요가 있을까 했는데 일단 유니코드에 대한 고민은 이정도로 하고 싶었기 때문이 가장 컸고, 일단 이렇게 하면 속도는 보장이 되기 때문에 그렇게 하였다.
그리고 오늘 오자마자 했던것이 유니코드 음절정보 테이블을 클래스에 박아 넣는 작업과 그 테이블에 접근하기 위한 메서드를 만들었다.
내일은 한국어 사전파일을 버클리DB에 넣는 작업과 인터페이싱 작업을 해야겠다.
p.s) Eclipse의 퀵픽스(Ctrl+1) 기능은 너무 좋아요. ㅋㅋㅋㅋ 이것덕분에 집에 올때 Java책을 가져올 필요를 못느꼈다는…(툴에 의존하는 바람직하지 못한 자세….ㅡㅡ;)
군산대학교 도서관 내 매점 테이블에서 작업을 했는데 너무 시끄러웠다는… 그치만 너무 시원했다. 추울정도로…. 내일두 다시 신세를 져야겠다. 집에 가서는 즐겁게 홈월드 게임을 해야겠다.
Lucene KoreanAnalyzer : 음소 <-> 음절 클래스 제작 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.