소프트웨어/실용주의 프로그래머

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

falconer 2008. 7. 30. 13:26

집단지성프로그래밍 책을 보다가 보니 꼭 필요한 것이 하나 없었다.
형태소분석기가 없으니 한글에 대해선 전혀 처리가 안된다. 그 이유때문에 형태소 분석기를 만들기엔 부담되고 그래서 강승식 교수의 형태소 분석기를 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