집단지성프로그래밍 책을 보다가 보니 꼭 필요한 것이 하나 없었다.
형태소분석기가 없으니 한글에 대해선 전혀 처리가 안된다. 그 이유때문에 형태소 분석기를 만들기엔 부담되고 그래서 강승식 교수의 형태소 분석기를 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
'소프트웨어 > 실용주의 프로그래머' 카테고리의 다른 글
형태소 분석기에 유니코드 모듈 추가 (0) | 2008.07.30 |
---|---|
형태소 분석기 0.9.1 배포 및 라이센싱 (0) | 2008.07.30 |
오픈소스 Lucene을 활용한 DB Full-text 검색엔진 개발 (0) | 2008.07.30 |
슬라이드 공유 사이트 (0) | 2008.07.01 |
뉴욕의 프로그래머 ★★★★ (0) | 2008.06.25 |