'검색엔진'에 해당되는 글 2건

  1. 2008.07.30 형태소 분석기 0.9.1 배포 및 라이센싱
  2. 2008.07.30 강승식 교수의 형태소분석기를 Python에서 활용하기 (1)
2008.07.30 13:28

형태소 분석기 0.9.1 배포 및 라이센싱

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

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


* 수정된 점

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

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

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

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

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

출처 : http://therocks.tistory.com/14

Trackback 0 Comment 0
2008.07.30 13:26

강승식 교수의 형태소분석기를 Python에서 활용하기

집단지성프로그래밍 책을 보다가 보니 꼭 필요한 것이 하나 없었다.
형태소분석기가 없으니 한글에 대해선 전혀 처리가 안된다. 그 이유때문에 형태소 분석기를 만들기엔 부담되고 그래서 강승식 교수의 형태소 분석기를 Python에 붙여보기로 했다. 그런데 의외로 간단하게 끝났다.

아래 코드를 컴파일 해서 사용하면 된다.
1. C 소스 파일 :
PyKMA.c
#include "Python.h"
#include "ham-ndx.h"
#include "ham-api.h"
#include "keyword.h"

static PyObject *ErrorObject;

static PyObject* PyKMA_getstems(PyObject *self, PyObject *args)
{
 PyObject* flist;
 int i;
 unsigned char *keys[MAXKEYWORDS];
 unsigned char *command;
 int nkeys;
 HAM_RUNMODE mode;
 char *option=NULL;

    if (!PyArg_ParseTuple(args, "s", &command))
        return NULL; 

 if (open_HAM_index(&mode, option, "./hdic/KLT2000.ini")) { /* initialize HAM */
  puts("ERROR: dictionary file path in <hdic/KLT2000.ini>"); return 0;
 }
 nkeys = get_stems(command, keys, &mode);
 flist = PyList_New(nkeys);

 for (i = 0; i < nkeys; i++) {
  PyList_SetItem(flist, i, Py_BuildValue("s",keys[i]));
 }

 close_HAM_index(&mode);
    return flist;
}

static struct PyMethodDef PyKMA_methods[] = {
 {"getstems",       PyKMA_getstems,    METH_VARARGS},
 {NULL,         NULL}
};

void initPyKMA()
{
    PyObject *m;
    m = Py_InitModule("PyKMA", PyKMA_methods);      
 ErrorObject = Py_BuildValue("s", "sample error");
}

2. setup.py
#!/usr/bin/env python

from distutils.core import setup, Extension

setup(name="PyKMA",
      version="1.0",
      description="Extract keyword",
      author="Samg Taeg Shim",
      author_email="sst9696@gmail.com",
      url="http://www.gamjapower.net/",
      ext_modules=[Extension("PyKMA", ["PyKMA.c"])]
     )

3. test 파일
# -*- coding: cp949 -*-
import PyKMA

if __name__ == '__main__':
 a = PyKMA.getstems("대한민국만세")
 print a

출처 : http://gamjapower.net/318

Trackback 1 Comment 1
  1. 2009.09.23 22:09 address edit & del reply

    비밀댓글입니다