예전부터 형태소 분석에 대해 관심이 많았다. 오래전 졸업작품으로  웹 크롤러와 명사 추출을 이용해서 간단한 검색엔진을 만들었다. 이 때, 명사 추출기보다 제대로된 형태소 분석기를 만들고 싶었다. 


 예전에는 공개된 형태소 분석기가 없었으나 요즘에는 공개된 형태소 분석기가 많아졌다. 때문에 많은 정보들이 공개되어 있고 공부할 수 있게 되었다. 그리고 세종프로젝트의 성과물이 공개되면서 이 자료를 활용할 수 있게 되었다. (세종 프로젝트 결과물은 https://ithub.korean.go.kr/user/main.do 에서 받을 수 있다. 해당 결과물을 다운 받기 위해서는 가입이 꼭 필요하다. )


 그동안 공부한 것을 바탕으로 아파치 라이센스, 파이썬 형태소 분석기를 만들어 봐야겠다. 내가 그동안 한다고 생각만 하고 끝까지 못한게 너무 많은데. 이번에는 시간이 많아서 성과물을 만들어야 하겠다. 


 현재 파이썬 쪽에서 사용하는 형태소 분석기는 konlpy(http://konlpy-ko.readthedocs.io/) 이다. 이 형태소 분석기는 여러 형태소 분석기를 묶어두어서 사용하기 편하게 되어 있다. 이 중에서 순수 파이썬 분석기는 하나도 없고 대부분 자바로 되어 있고, JPype 를 이용해서 해당 jar 라이브러리를 이용하게 되어 있다. mecab-ko 의 경우 C++ 인데, 윈도우즈에서 사용이 불가능한 문제점이 있다. (난, 개발환경을 윈도우즈를 추구하는 편이다. ) 


 성과물을 끝까지 만들어서 konlpy 에 내가 만든 형태소 분석기를 추가 했으면 좋겠다. 

 그전 포스팅을 통해 Windwos와 Linux(Ubunte)에서 WxWidget컴파일과 그 운영체제에 맞는 IDE툴을 통해 개발할 수 있는 샘플을 컴파일 해봤습니다. 

전에 Mac에 대해서 컴파일을 콘솔에서는 성공했는데, XCode에서 사용할 수 있는 환경을 설정하지 못해 그동안 글을 포스팅하지 못했는데, 오늘 드디오 XCode에서 컴파일 하는 방법에 성공했습니다. 개인적으로 GUI환경에서 런타임으로 break point 를 걸고 디버깅하는 환경에 목숨거는 경향이 좀 있습니다.
 Mac에서 컴파일 하는 방법이 carbon 을 이용하는 방법과 cocoa 를 이용하는 방법이 있습니다. cocoa를 이용하는 방법은 컴파일이 잘 안되어서 carbon 을 이용하는 방법을 사용했습니다. 

테스트 환경은 
운영체제 OSX 10.6.6
WXWidget :  WxMac-2.8.12
XCode : 4.0.2 

 우선  맥용 wxWidget 을 받아서 콘솔에서 컴파일 해야 합니다. 맥용 wxWidget은 http://wxwidgets.org/downloads/  에서 wxmac 을 다운 받습니다.  적당한 곳에 압축을 푼다음 해당  파일내 install-mac.txt 에 있는 것처럼 컴파일 합니다. 
 
제 경우 콘솔에대 해당 디렉토리를 접근한 후 아래와 같이 했습니다. 
#mkdir build-carbon-debug
#cd build-carbon-debug
#arch_flags="-arch i386"
#../configure CFLAGS="$arch_flags" CXXFLAGS="$arch_flags" CPPFLAGS="$arch_flags" LDFLAGS="$arch_flags" OBJCFLAGS="$arch_flags" OBJCXXFLAGS="$arch_flags" --enable-unicode --enable-debug --disable-shared
 #make

빌드는 후, XCode를 통해 샘플을 컴파일 할 수 있습니다.  XCode 에서 Cocoa Application 으로 새로운 프로젝트를 생성합니다. WxMac을 Cocoa로 컴파일하지 않더라도 사용할 수 있습니다. 그냥 콘솔용(Command Line Tool)로 프로젝트를 구성할 수도 있지만 실행시 포커스가 설정되지 않는다. 그 때문에 따로 추가작업(http://wiki.wxwidgets.org/WxMac-specific_topics#My_app_can.27t_be_brought_to_the_front.21) 이 필요합니다. 특별히 컴파일시 따로 다른 점은 없기 때문에 그냥 Cocoa 프로젝트를 이용합니다.

이미 존재하는 파일 __AppDelegate.h , __AppDelegate.m  , main.m 파일을 삭제합니다. 그리고 maip.cpp를 아래 처럼 적용합니다.
====================
#include "wx/wx.h"
 
class MyApp: public wxApp
{
    virtual bool OnInit();
		
    wxFrame *frame;
};
 
IMPLEMENT_APP(MyApp)
 
 
bool MyApp::OnInit()
{
    frame = new wxFrame(NULL, -1,  wxT("Hello wxWidgets"), wxPoint(50,50), wxSize(800,600));	
    frame->Show();
    return true;
}
================== 

 이제 프로젝트 빌드 설정을 해야 합니다. 

빌드 설정에 필요한 path  들은 wxWidget 자체를 컴파일 했을 때 생성되는 wx-config 파일을 이용해서 path를 알 수 있습니다. wxWidget 을 빌드한 패스(저의 경우 build-carbon-debug 패스안에 )wx-config파일이 생성됩니다. 
 
#./wx-config --cppflags 
#./wx-config --libs


--cppflag 옵션은 X-Code에서 빌드 설정 중 other c flags 에 설정해야 하고,  --libs의 경우 other linking flags 해당 결과값을 넣습니다.  그리고 나서 컴파일 해면 빈 Window가 실행됩니다. (만일 컴파일에 실패한다면 32bit로 수정해서 컴파일합니다.)

 
 sample 들에 대해서도 XCode를 통해 컴파일 할 수 있습니다. 제가 가장 좋아하는 grid 샘플을 예로 들겠습니다. 임시로 만든 main.cpp를 삭제하고 sample 폴더에 있는 griddemo.h, griddemo.cpp 를 복사해서 컴파일 해보면 실행되는 것을 확인 할 수 있습니다. 


작성이 : 승용.한밀
최종수정일 : 2012.03.10
 
 이번에는 윈도우즈에서 만든 codeblock 프로젝트를 전체적으로 변경하지 않고, target 을 추가해서 둘다 추가 할 수 있는 방법을 찾아 보도록 하겠습니다.

 저번과 마찬가지로 윈도우즈에서 default 로 프로젝트를 만듭니다. 그리고 빌드 후, 실행해봅니다. 이번에는 모든 설정을 윈도우즈에서 설정해서 리눅스에서는 확인만 하는 방법을 사용하겠습니다.

 project->Properties.. 를 선택하면 Project/targets options 창이 뜹니다. Build targets
사용자 삽입 이미지

에서 오른쪽 Build targets 새롭게 target 을 추가합니다. 모든 설정을 추가하기는 귀찮으므로 Duplication 을 이용해서 Debug 를 복사해서 Linux_Debug 를 만들고, Release 를 복제해서 Linux_Release 를 만듭니다. 그리고 기존에 있는 Debug 나 Release 는 Rename 버튼을 이용해서 Win_Debug, Win_Release 로 변경합니다.
 선택한 target 에 대해 설정할 수 있는 공간이 오른쪽에 있습니다. 각 target 에 맞게 Platforms 를 선택하도록 합시다. Win_Debug, Win_Release 는 Windows 로 Linux_Debug 와 Linux_Relase는 Unix 로 설정합니다. target 별로 object 와 exe 파일들을 따로 나오도록 설정할 수도 있습니다. 저의 경우, 이 기능이 필요 없기 때문에 설정하지는 않겠습니다. OK 버튼을 눌러서 나옵니다.

 이제는 Project->Build options.. 를 눌러  Project build option 창을 띄웁니다. 지난 번( [wxwidget] 08. 윈도우즈에서 만든 codeblock 프로젝트 Ubuntu 에서 컴파일 하기 ) 과 동일하게 Linux_Debug 와 Linux_Release 를 설정하면 됩니다. 프로젝트 전체적으로 설정되어 있는 설정에 대해서는 Win_Debug와 Win_Release 로 설정할 수 있도록 변경해야 합니다. 예를 들어 지난번에 윈도우즈 용이라서 지워라 했던 Compiler Settings 의  Other option  중 
-pipe
-mthreads
[[if (PLATFORM == PLATFORM_MSW && (GetCompilerFactory().GetCompilerVersionString(_T("gcc")) >= _T("4.0.0"))) print(_T("-Wno-attributes"));]]

 같은 설정은 Win_Debug와 Win_Release 에서만 동작하도록 수정합니다.

수정해야 하는 것들은
== compiler Settings 의  Other option  안의 내용 ==
-pipe
-mthreads
[[if (PLATFORM == PLATFORM_MSW && (GetCompilerFactory().GetCompilerVersionString(_T("gcc")) >= _T("4.0.0"))) print(_T("-Wno-attributes"));]]
==================================

== compiler Settings 의  #defines  안의 ==
__GNUWIN32__
__WXMSW__
====================================

== Search directory 의 Compiler 안의 디렉토리 ==
%WXWIN%\include
%WXWIN%\contrib\include
=======================================

== Search directory 의 Resource Compiler 안의 디렉토리 ==
%WXWIN%\include
====================================

그리고 target 을 복제 하면서 생긴 윈도우즈 설정도 지워주어야 합니다.
Linux_Debug 와 Linux_Release 각각에 대해서
Linker Settings 의 Link Library  를 제거해 줍니다.

추가로 리눅스에서 컴파일 가능하도록
Compiler Settings 의 Other options 에서 `wx-config --cflags` 를 추가 합니다.
Linker Setting 에서는 Other Linker Option 에 `wx-config --libs` 를 추가합니다.

이제 설정은 다 끝났습니다.

이 프로젝트를 우분투로 복사해서 리빌드 해 봅니다.
이번에도 역시 dlg->SetIcon(wxICON(aaaa)); // To Set App Icon
라는 곳에서 빌드 오류가 발생하는데 이벤에는
#ifdef __WXMSW__
   dlg->SetIcon(wxICON(aaaa)); // To Set App Icon
#endif
같은 방법으로 우분투만 동작하지 않도록 설정합니다.