약 일주일 정도의 작업과 우역곡절 끝에 KoNLP 0.76 업데이트에 성공했다. 현재 윈도우 바이너리 버전 배포가 확정되었고, 맥 버전이야 거의 리눅스에서 돌아가면 빌드에 별로 문제가 없다.
내부적으로 많은 코드 변화가 있었으나, 사용자들은 잘 인지하기 힘들듯 하다.
일단 바뀐 부분은 사전 데이터를에 대해서 zip파일에 압축해서 배포하고(Sejong 패키지), 이에 대해 압축을 풀지 않고 바로 메모리로 읽어들이는 방식으로 사전 접근 방식을 취했다. 이로서 R core팀이 원했던 마지막 조건을 만족하게 되었다.
문제는 core팀이 사용을 독려했던 unz 함수였는데, 사실 이 함수는 압축파일의 데이터를 바이트 스트림으로 변환을 해서 읽어 들이는 방식으로 텍스트 형식은 지원하지 않아 내가 사용하는 UTF-8버전의 사전은 읽어들일 수 없다는 것이었다. R core 소스 코드를 봤는데, 아직 이 함수는 미완인 듯 보였다. 따라서 이 부분은 자바로 해결했다.
사실 KoNLP의 핵심 코드는 자바로 구성되어 있는데, 자바로 계속 구현을 해나간 이유가 있다.
먼저 자바는 텍스트 관련 로직의 개발 및 디버깅이 C, C++보다 훨씬 쉽다. 이는 C++에서 유니코드를 콘솔에 찍으면서 개발해본 사람이라면 안다.
두번째는 텍스트 처리 관련 여러 편리한 기능이 많다는 것인데, 이는 rJava의 기능인지 자바의 기능인지 모르겠지만, 입력문자열의 인코딩을 로케일 기반으로 예측해서 유니코드로 변환해 잘 처리해 준다는 것이다. 따라서 윈도우, 리눅스, 맥 등 멀티 플랫폼에 따른 예외 코드를 별도로 구성할 필요가 없어서 정말 편하다.
아직 R은 자바보다 CJK 문자열 지원이 미흡한게 사실이다. 따라서 이런 부분들을 자바의 그것을 활용하면서 상쇄시켜 나간 것이다.
일단 서론은 이렇고….
금번 업데이트의 핵심은 사용자 디스크 리소스 절감(R core팀의 요구)과 더불어 사전관련 편의 함수를 제공한다.
1 2 3 4 5 6 7 8 9 10 11 | useSystemDic() extractNoun("성긴털제비꽃은 너무 예쁘다.") SimplePos09("성긴털제비꽃은 너무 예쁘다.") SimplePos22("성긴털제비꽃은 너무 예쁘다.") MorphAnalyzer("성긴털제비꽃은 너무 예쁘다.") useSejongDic() extractNoun("성긴털제비꽃은 너무 예쁘다.") SimplePos09("성긴털제비꽃은 너무 예쁘다.") SimplePos22("성긴털제비꽃은 너무 예쁘다.") MorphAnalyzer("성긴털제비꽃은 너무 예쁘다.") |
use*Dic() 함수들은 Sejong패키지에서 제공하는 사전을 선택적으로 사용하기 위한 함수들이다. 따라서 이런 종류의 함수를 사용해 Sejong에서 제공하는 사전을 사용해 볼 수 있다. 위의 코드에서 “성긴털제비꽃”단어는 시스템 사전만으로 분석이 불가능하고 세종계획에서 제공하는 사전을 통해서 분석이 가능하다. 사실 이 함수들은 이미 이전 버전에서 가능한 함수들을 제공했으나, 복잡한 시스템 함수 몇 개를 엮어서 사용해야 되는 사용상 불편함들이 있어서 그냥 쉬운 함수를 제공하게 되었다. 앞으로 공개 데이터를 활용해 여러 사전들을 통합해 나갈 생각이다.
이 밖에 is.ascii, is.jaeum, is.moeum 등과 같은 텍스트 처리용 함수를 추가했고, 기존의 함수와 함께 이전부터 해온 입력 문자열의 UTF-8 컨버팅 작업이 앞으로 필요없게 되었다. 따라서 윈도우든 리눅스든 그냥 입력 문자열을 넣기만 하면 된다. 이들 함수 역시 복잡하고 지저분한 부분은 자바에서 케어한다.
아마도 다음 버전은 금번 버전의 문제점과 더불어 소스코드 내부 문서 작업, 그리고 Sejong 패키지의 사전 데이터 모집 및 추가 작업으로 진행될 듯 하다. 일단 여름방학 동안 해야 했던 큰일 중에 하나를 끝내서 기분은 좋다. 내일 교육시 잘 사용할 수 있기만을 바랄 뿐이다.
ps. 2012.09.12 아침 시간에 아직 KoNLP 윈도우 바이너리가 cran에 올라가진 않았으니, 반나절 정도 기다렸다가 사용해보길 바란다. 아니면 이 페이지에서 확인하고 받아도 된다.
KoNLP 0.76 업데이트 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.