Lucene KoreanAnalyzer : 음소 <-> 음절 클래스 제작

유니코드 한글 자소 분리모듈에 대한 설명을 conv2님의 도움을 받아서 분석을 하고 음소분리정보테이블을 추가해서 Jaso클래스를 만들었다.

그런데 이뿐만 아니라 음소에서 음절로 만들어지는 메서드가 있어야함을 느껴서(실제 빈번하게 쓰인다.) 만들고자 했는데

전에 포스팅한 유니코드 생성 원리 포스팅에 쓴 함수를 적용하기 위해서는 음소정보를 이용한 인덱스 번호 추출이 필요했다.

한 글자의 유니코드 값 계산 법
= 0xAC00(유니코드 한글 시작점) + [초성번호]*588 + [중성번호]*28 + [종성번호]

식은 위와 같다.

음소별로 해싱을 구현하면 편하긴 하지만 빠르게 하기 위해서 식에 쓰이는 ‘초성번호’, ‘중성번호’, ‘종성번호’에 대한 랜덤 엑세스를 위해 역색인을 만들어 버렸다.(음절정보테이블을 만들때보다는 훨씬 편하게 만들었다. 역시 한번쓰고 버릴 코드니 Python으로 쓱싹~~~ ㅋ)

색인테이블을 어떻게 구성했는지는 번호 테이블을 잘 보면 알 수 있다.
간단히 정리하면

1. 테이블의 인덱스와 유니코드를 유니코드를 키로 하고 인덱스 번호로 하는 사전으로 만든다.
2. 0x3131에서부터 0x314e까지의 테이블을 만들고 그 맵핑된곳에 인덱스 번호를 넣는다.(중성은 대역이 좀 다르다.)
3. 적절한 타협… 0x0000처리 또한 음소정보 테이블에 나오지 않는것들은 -1을 입력한다든지….

물론 만들면서 색인테이블까지 구현할 필요가 있을까 했는데 일단 유니코드에 대한 고민은 이정도로 하고 싶었기 때문이 가장 컸고, 일단 이렇게 하면 속도는 보장이 되기 때문에 그렇게 하였다.

그리고 오늘 오자마자 했던것이 유니코드 음절정보 테이블을 클래스에 박아 넣는 작업과 그 테이블에 접근하기 위한 메서드를 만들었다.

내일은 한국어 사전파일을 버클리DB에 넣는 작업과 인터페이싱 작업을 해야겠다.

p.s) Eclipse의 퀵픽스(Ctrl+1) 기능은 너무 좋아요. ㅋㅋㅋㅋ 이것덕분에 집에 올때 Java책을 가져올 필요를 못느꼈다는…(툴에 의존하는 바람직하지 못한 자세….ㅡㅡ;)
군산대학교 도서관 내 매점 테이블에서 작업을 했는데 너무 시끄러웠다는… 그치만 너무 시원했다. 추울정도로…. 내일두 다시 신세를 져야겠다. 집에 가서는 즐겁게 홈월드 게임을 해야겠다.

0 0 votes
Article Rating
Subscribe
Notify of
guest

6 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
typos

ㅎㅎ 휴가중 고생이군

고감자

고생은요. 쩝

재밋던데요. ㅎ

크라미스

연구실에 있었을때 교수님과 위와 비슷한 프로젝트를 할 뻔 했었는데…
어떻게 보면 얻은것도 있지만 잃어버린게 더 많은 것 같습니다. 안정적인 일자리 뒤에 예전에 가지고 있었던 비젼 혹은 꿈들을 망각해버리는 그러한 트레이드오프가 일어나버렸으니까요.
가끔 고감자님의 블로그에서 예전의 꿔왔던 꿈들을 잠시 회상하곤 합니다. ^^

고감자

그렇죠. 트레이드오프…

그래도 여가시간에 꿈을 이뤄보심도 좋을거 같은데요.

LuzLuna

날이 덥습니다.. 지치지 마시고….. SVN하나 공개해주세요~~~ ㅎㅎ

고감자

SVN공개는 어느정도 괘도에 오르면 할 예정입니다.

아직 그럴만한 수준도 아니구요.