연구/형태소 분석2008. 3. 18. 18:13

형태소 분석기에 대한 다양한 문의가 오고, 몇몇 분들이 라이센스에 대한 문의를 해주셔서 이를 정리하고자 한다. 정리하면서 몇 가지 이상한 분석 결과를 만들어내는 것들을 수정해서 재배포 한다.

1. Korean Morpheme Analyzer V0.9.1 by therocks.
이전 버젼들은 모두 삭제해서 지금 올라가는 것을 사용하는 것을 권장한다.


* 수정된 점

1) 부정확한 띄어쓰기 추가 개선
'검색서비스를' 과 같은 문장을 처리할 때, 속도를 향상시키기 위해서 앞부분에서 적당히 검색결과가 나오면 띄어쓰기 처리를 해주고 다음 문자열들을 처리하도록 하였는데, 검색(명사)+서(조사)+[ ]+비(명사) 가 되는 순간 잘라버려서 서비스가 정상적으로 추출되지 않는 문제가 있었는데, 이를 5글자 이후에 처리하도록 하여 5글자 내에서의 부정확한 띄어쓰기를 없앴다. 5글자가 넘는 경우에 대해서는 추후 고려해야할 것같고, 아마도 속도가 좀 느려질 것 같다.

2) 미등록어 처리 기능 개선
미등록 어휘가 이상한 사전 어휘들로 완결되지 않은 상태(어미나 나타날 것이라 고려하였지만, 나타나지 않고 끝나는 경우)에서 조합되는 경우가 발생하는데, 이를 위해 미등록어를 prune하는 것을 방지하도록 수정하였다.

2. Licensing
생각외로 많은 분들이 관심을 주시고, 프로그램을 사용하시는 것 같아서 이전에 고민하지 않던 라이센스를 고려해야할 것 같다. 사전에 대한 문제가 아직 남아 있지만, 일단은 GPL로 진행할 것이다. 아직 정확한 체계를 잡지 않았지만, Dual License 를 취해서 개인이나 비영리에 대해서는 무료로 하고, 영리에 대해서는 다른 라이센스를 적용하고자 한다. 처음부터 많은 사람들이 활용할 수 있는 형태소 분석기를 배포하는 것이 목적이었기 때문에, 돈에는 별 욕심이 없다.

기본적으로 다음의 네 가지의 원칙을 가지고 라이센싱에 대해서 고민하고자 한다.

  • 소스와 내부 데이터의 수정과 활용은 자유롭게 할 수 있다.
  • 소프트웨어에 대한 지원을 하지 않는다.
  • 다른 프로그램이나, 서비스에 활용시 출처를 밝혀야 한다.
  • 영리적인 목적으로 프로그램을 배포하여서는 안된다.

조만간 다른 자료들을 검토하여 자세한 라이센스 정책에 대해서 업데이트 하고자 한다.

Posted by 락끄

댓글을 달아 주세요

  1. 비밀댓글입니다

    2008.05.03 22:12 [ ADDR : EDIT/ DEL : REPLY ]
  2. 안녕하세요^^ 젊으신것 같은데 실력이 엄청나시네요~ 형태소 분석기 관련되서 공부해야 될부분이 뭐가 있을까요? 자연어처리나 전산언어만으로는 감만 오지 도데체 어떻게 구현해야 될지 모르겠는데 어떤부분을 참고하셨는지 제가 알수있을까요?

    2008.05.26 17:13 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 저는 처음에 강승식 교수님의 "한국어 형태소 분석과 정보 검색"이라는 책을 전체적으로 봤구요. 그 이후에 심광석 교수님의 논문을 봤구요. 그 외에도 몇가지 형태소 분석이나, 띄어쓰기 처리 등에 관한 논문들을 봤습니다.

      그 외에는 그냥 제 프로그래밍 스타일로 쭉 짠거구요. ^^
      사실 프로그램보다는 언어학적 지식이 좀 있어야 하는 것 같더라구요. 문법적인 규칙들을 어느정도는 넣어야 하는데, 예를 들어 음운 규칙이나, 상관 규칙등은 정리해서 반영하는게 쉽지는 않은 것 같습니다.

      2008.05.27 16:06 신고 [ ADDR : EDIT/ DEL ]
  3. 딕셔너리 부분을 Revered 색인파일만들어서 찾아오는식으로 처리해야될것같습니다. 어쨋든 큰도움 되네요 감사합니다.

    2008.05.26 17:43 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 저도 그렇게 생각하고 있는데, 어떻게 하는지 모르겠네요. 파일 처리 쪽이 완전 취약해서, 혹시 참고할만한 자료가 있으면 알려주시면 감사하겠습니다. ^^

      2008.05.27 16:07 신고 [ ADDR : EDIT/ DEL ]
  4. 음 대용량 자료처리 Managed Gigabytes 라는 책이 있는데요.

    예전 방식이긴한데 큰 도움이 되긴합니다.

    아니면 최소한 2진 트리형식

    단어를 2진파일형태로(유니코드는 크기가 크니까)저장후에

    3N혹은 4N정도 아스키코드 탐색하면 지금보단 속도는 느리겠지만

    앞으로 동의어 등의 처리까지 생각한다면 낫지 않을까요?

    대용량 자료처리에 관한 부분은 데이터베이스 구현이 나와있는 책이나

    루신의 2진데이터 체계를 참고하면 될것같은데

    저도 더락님의 소스를 가지고 개발해도 될까요? 사실

    루신을 1년여넘게 수정해서 만든 검색엔진이 있는데 형태소 분석기를

    만들어보고싶었거든요..

    2008.05.27 18:49 [ ADDR : EDIT/ DEL : REPLY ]
  5. 비밀댓글입니다

    2008.05.31 21:57 [ ADDR : EDIT/ DEL : REPLY ]
  6. 검개그에서 공개하신다는 글 봤는데
    구글 검색에서 또 보게 되었네요.^^

    좋은 자료 고맙습니다.^^

    2008.07.09 15:45 신고 [ ADDR : EDIT/ DEL : REPLY ]
  7. 비밀댓글입니다

    2009.07.08 03:05 [ ADDR : EDIT/ DEL : REPLY ]

연구2008. 2. 18. 21:36

수많은 삽질 끝에 APM_SETUP6.0과 Tomcat6.0을 연동하는데 성공해서 이와 관련된 내용을 정리해서 올리고자 한다. 나와 비슷하게 많은 사람들이 삽질을 할 수 있을 듯 한데, 조금이나마 도움이 되었으면 좋겠다.

먼저 웹에서 받을 수도 있겠지만, 일단 본인이 사용한 파일들을 올려두겠다. 현재 날짜로 (2008년 02월 18일) 최신 릴리즈를 사용한 것들이라 추후에는 사라질 수도 있을 것 같다. 그리고 이전 버젼들과는 파일들이 서로 호환되지 않는다고 하니 파일들의 버젼도 유의해서 확인해야할 것 같다.


먼저 위의 파일들을 적당한 폴더에 받아두고, 설치와 설정을 다음 순서와 같이 진행하면 된다.

0. JDK 설치
java기반의 Tomcat을 구동해야하기 때문에 JDK는 기본적으로 설치가 되어 있어야 한다. 본인은 JDK6.0을 설치했다.

1. APM 설치
내려 받은 APM을 클릭하여 설치하면 된다. 설치는 아주 간단히 되므로 굳이 상세히 언급하진 않겠다. 다만 본인은 C:\APM_Setup 이 root directory가 되도록 설치하였으며 그 외에도 기본 설정을 사용하였다.

2. Tomcat 설치
마찬가지로 간단히 설치하였다. JDK가 설치되었다면 큰 문제 없이 설정된다. 다만 본인은 C:\APM_Setup\Server\Tomcat 6.0 에 설치되도록 하였는데, APM_Setup이 그런 디렉토리 구조를 가지고 있어서 왠지 통일하는게 좋을 것 같아서였다. Tomcat은 파일 복사만으로도 별 문제 없이 실행할 수 있으나, Windows Service로 구동하기 위해서 서비스와 함께 설치되도록 하였다.

3. JK 설정

  • mod_jk.so 복사 먼저 내려 받은 jk library를 APM이 설치된 하위의 Apache module 폴더에 복사한다. 이때 파일 이름을 mod_jk.so로 바꾸어 준다. 본인의 경우에는 C:\APM_Setup\Server\Apache\modules\mod_jk.so 파일이 생성되었다. 이후부터는 C:\APM_Setup\Server\Apache를 %APACHE_HOME% 이라 작성하겠다. 설치하는 각자의 Apache가 있는 곳과 대응된다고 보면 된다.
  • httpd.conf 설정 다음으로 %APACHE_HOME%\conf\httpd.conf 파일을 수정하여 apache가 jsp를 인식했을 때 tomcat으로 그 처리를 전달하도록 한다. httpd.conf 파일에 다음과 같은 부분들을 추가한다.
    아래에서 붉은색으로 되어 있는 부분들이 중요한 부분들이고 그 외에는 로그와 같은 정보를 확인하도록 설정하는 것이다. tomcat과 관련된 worker를 설정해주기 위해 이와 관련된 파일을 지정하고 설정 정보를 제공해주어야 한다.
##########################################################################
# @START tomcat jk connector
#
# Load mod_jk module
LoadModule jk_module modules/mod_jk.so
# Where to find workers.properties
JkWorkersFile conf/workers.properties
# Where to put jk logs
JkLogFile logs/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel debug
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
# Send JSPs for context /*.jsp to worker1
JkMount /servlets-examples/* worker1
JkMount *.jsp worker1
#
# @END tomcat jk connector
##########################################################################
  • workers.properties 설정 %APACHE_HOME%\conf\workers.properties 파일을 생성하고 해당 worker와 관련된 정보를 지정해준다.
# Define 1 real worker using ajp13
worker.list=worker1
# Set properties for worker1 (ajp13)
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

이같이 하고, Tomcat과 APM을 구동하면 무리 없이 jsp파일이 처리되는 것을 확인할 수 있다. apache가 jsp파일에 대해서 요청이 오면 tomcat을 호출하는 것이기 때문에 jsp에 대해서는 모두 tomcat의 context path설정을 따라서 진행이 되었다. 예를 들어 /test/index.jsp라고 하면 tomcat의 ROOT 하위의 /test/index.jsp를 호출하게 된다. php나 html은 여전히 apache의 context path를 따르기 때문에 둘간의 혼동을 없애려면 둘의 root directory를 하나로 통일해 두는 것이 좋을 것 같다.

그리고 중요한 것은 혹시나 virtual host를 사용하는 경우에는 JkMount *.jsp worker1 와 같이 worker를 지정할 때 각 virtual host마다 지정해주어야 한다. 본인의 경우 Virtual Host를 사용하였는데, 문제 없이 잘 동작하는 것을 확인할 수 있었다.

보통은 Tomcat으로 작업하면 java 기반으로 하고, APM을 사용하는 경우에는 php를 기반으로 하기 때문에 크게 연동할 일이 없을 것 같은데, 본인의 경우 wiki 기반의 홈페이지에 java 기반의 appliation demo를 보여주기 위해서 연동할 필요가 있었다. 물론 Apache와 Tomcat을 각각 80, 8080 포트에 따로 구동할 수도 있었지만, 본인이 사용하는 Network내에서는 8080포트를 외부로 공개하는 것을 꺼리기 때문에 이같은 연동이 필요했다.
또한 하나의 서버에서 Virtual Host로 두개의 홈페이지를 구동하는 경우에 한 홈페이지는 php기반이고, 다른 홈페이지는 jsp기반이라면 유용하게 적용될 것이라 생각한다. 본인도 아직 설치해보지는 않았지만, 추후 이같은 작업이 필요했기에 연동을 시도했다.

* 참고 사이트
http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html

Posted by 락끄

댓글을 달아 주세요

  1. 자바로 만드셨으니 루씬에 붙여보실 생각은 없으신가요? ^^ 괜찮으시다면 제가 붙여봐도 될까요?

    2008.02.19 17:50 [ ADDR : EDIT/ DEL : REPLY ]
    • 네 붙여 봐도 상관 없습니다. 형태소 분석기를 상업적 용도로 사용하는 것만 아니면 괜찮습니다. 붙여보시고 저한테 결과좀 알려주세요. 복합명사 분해나 그런 부분을 확장하고, N-Gram화 해서 색인하면 괜찮을거에요.

      2008.02.20 04:20 신고 [ ADDR : EDIT/ DEL ]
  2. 완성이 언제가 될지는 모르나 언젠간 해야할 일이라...
    완성되면 알려드리겠습니다.^^

    2008.02.20 10:50 [ ADDR : EDIT/ DEL : REPLY ]
  3. 따누

    httpd.conf 설정에서 설정을 하면 아파치가 죽어버리네요;;
    뭐가 문제죠??
    APM버젼은 4/18일 버젼입니다.

    2008.05.03 22:21 [ ADDR : EDIT/ DEL : REPLY ]
    • 아마도 설정에 약간 문제가 있는 것 같습니다.
      아파치에서 설정한 모듈을 읽어들이지 못하면 실행이 제대로 안되는 것 같습니다. 추가한 설정을 모두 없애고, 한줄씩 추가하면서 확인해보세요. 저도 그렇게 해서 제대로 돌아가게 하긴 했는데, 따누님것도 잘 될지는 모르겠네요.

      2008.05.27 16:00 신고 [ ADDR : EDIT/ DEL ]

연구/형태소 분석2008. 2. 15. 09:40

형태소 분석기 코드를 정리해서 간단히 데모가 동작하도록 설치했다. 그와 동시에 코드를 다시 한번 훑어봤는데, 역시나 정리해야할 것들이 너무나 많다.

  • 몇몇 경험적 지식(heuristic)을 적용했는데, 정규화된 형태로 코드에 적용되어 있지 않다. 한번 구조를 바꾸면 해야할 일이 너무 많기 때문에 쉽게 손대고 있진 못하지만, 어쨌든 단순 선후 조건이 아닌 어휘의 위치 정보를 반영할 수 있는 형태로 적용해야겠다. Shallow Parsing을 적용하면 결과가 더 좋아질 것 같은데, 수집해야할 정보와 변경해야할 코드가 너무 많아 쉽사리 손대지 못하겠다. ㅠ.ㅜ
  • 사전 정보를 많이 모아놨으나, 정리해서 올리지 못하니 모으나 마나이다. 꼭 잘 정리해서 올려야겠지만, 당장 코가 석자라 여유가 없긴하다. 그래도 일단 사전 정리해야한다는 것을 기억하자.
  • 코드를 공개하긴 했지만, 코드에 대한 설명이나 개발 환경설정등에 대한 설명이 너무 없어서 너무 불친절하다는 생각이 든다. 시간 나는대로 틈틈히 정리해서 다른 사람들에게 많은 도움이 될 수 있도록 해야겠다.

사실 공개하고자 했던건 데모이다. 여기로 가면 간단한 형태소 분석 결과를 확인할 수 있다. 항상 켜져있다는 보장은 못하겠지만, 한동안은 켜놓을 생각이고, 학교 서버가 정리되면 좀더 안정되게 데모가 진행되게 할 생각이다. 많이 미흡하지만, 그래도 도움이 되었으면 좋겠다.

몇몇 논문들과 글들을 참조해서 품사 정보를 정의해서 분석하도록 하는데, 좀 복잡하다. -_-;. 형태소 분석을 하고자 하면 정말 너무 할게 많다. -_-;

너무너무너무, 갈길이 멀지만, 차근히 해보자!

누군가 이 글을 볼지 모르겠지만, 아래 글의 파일을 수정해서 올렸다.
불필요한 파일들을 삭제하고, 불필요한 라이브러리들도 없앴다. 연구실에서 작업할 때 다른 것들과 같이 사용하느라 썼던 것인데, 형태소 분석기만 있을 때에는 별로 필요 없다.

그리고, 원래 1.1 버젼이었는데, 사실 1.1이라고 한 건 연구실에서 사용할 때 1.0이라고 해서 연구실 내에서 release한게 있고, 그걸 내가 수정해서1.1이라고 했는데, 다시 보니 영 1.0이 될 수 없을 듯 하다. 일단 0.9로 하고 좀더 맘에 들면 그 때 1.0으로 재업해야겠다.

Posted by 락끄

댓글을 달아 주세요

  1. 방금 서비스 잠시 보고 왔습니다. ^^ 멋지네요 ~~ 혼자 다 구현하신 건가요? 쉽지 않은 작업일텐데, 고생하셨네요...

    2008.02.15 10:00 [ ADDR : EDIT/ DEL : REPLY ]
    • 사실 기존에 좀 있는 자료와 소스를 활용하긴 했지만, 새로 태어났죠. ^^

      2008.02.17 22:51 신고 [ ADDR : EDIT/ DEL ]
  2. 사전 구축부터 쉽지 않은 작업이었을텐데 수고많으셨네요..

    2008.02.17 20:48 [ ADDR : EDIT/ DEL : REPLY ]
    • 사전 모으고 관리하는건 지금도 힘든 것 같아요.^^ 사전이 한번 업그레이드 되면 소스도 한바탕 뒤집어져서... ^^ 담번에 예정된 작업이 있긴 한데, 언제 끝날지는 모르겠네요~

      2008.02.17 22:51 신고 [ ADDR : EDIT/ DEL ]
  3. 지나가다

    사전 자료 양이 꽤 많더군요.
    어디서, 혹은 어떻게 구하셨는지요?
    국럽국어원 자료실에 쓸만한 자료들이 좀 있습니다.
    6개 사전 수록어 목록과 단어 사용 빈도 조사한 자료가 그것입니다.
    (6개 사전 수록어 목록은 품사 정보가 없다는 것이 많이 아쉬운 부분입니다.)

    2008.03.04 16:44 [ ADDR : EDIT/ DEL : REPLY ]
    • 기본적인 자료들은 국립 국어원 자료실에서 가지고 온 것입니다. 알고리즘이 빈도나 그런 것들을 이용하지 않기 때문에 빈도 자료를 활용하진 않습니다. 품사는 이곳저곳에서 발췌해서 채운 것입니다. 아직 부족한 것이 많죠.^^

      2008.03.06 12:30 신고 [ ADDR : EDIT/ DEL ]
  4. 안녕하세요. irgroup에서 보고 들어와본지 서너번이 넘어가네요 ㅎ
    건방진 이야기 일지 모르겠습니다만... 라이선스 조항이 없는거 같아서요. 저도 검색서비스를 혼자지만 준비하고 있는 중이라 형태소 분석기에 많은 관심이 있습니다. 라이선스에 관해 알려주시면 많은 도움이 되겠습니다. 너무 겸손하셔서 묻기가 겁나네요. ㅠㅜ 즐거운 하루 되세요!

    2008.03.05 09:55 [ ADDR : EDIT/ DEL : REPLY ]
    • 라이센스는 아직 생각해보지 않았습니다. 아무래도 오픈 소스이다보니 연구용으로는 자유롭게 써도 될텐데, 상업적인 목적이라면 어떻게 해야할지 모르겠네요.

      2008.03.06 13:17 신고 [ ADDR : EDIT/ DEL ]
  5. 박그니

    안녕하세요. 형태소 분석기 대단하네요 ㅎㅎ
    루씬에서 한글 색인어 추출 하려고 분석기들을 찾던중에 이곳을 발견하게 되었습니다. 소스를 실행 해 봤는데요 좋은것 같네요 ^-^
    여기서 명사 부분만 색인어 추출 하려면 어떻게 해야 될까요?
    어느 클래스 부분을 손봐야 될지요?? ㅎㅎ

    2008.03.17 01:07 [ ADDR : EDIT/ DEL : REPLY ]
    • 안녕하세요. 관심 가져주셔서 감사합니다.
      테스트 코드를 확인하시면 쉽게 아실 수 있을겁니다.
      분석 결과에는 품사도 포함하고 있으므로 명사에 해당하는 것들을 추출하시면 될 것 같습니다. 빈도나 이런 것들을 고려하기 위해서는 다른 처리가 필요한데, 이는 직접 추가하셔야 할 것 같습니다.

      2008.03.17 14:16 신고 [ ADDR : EDIT/ DEL ]