분류 전체보기 46

루씬 한글 검색 엔진 제작

국내에서 루씬을 사용하는 검색 솔루션 업체가 상당히 많이 늘어나고 있습니다. 물론 분산 검색을 위해서 루씬을 포함하고 있는 Solr를 사용하는 업체도 늘어나고 있습니다. 물론 제가 루씬 검색 엔진을 제작한다고 하더라도 눈여겨볼 사람은 많지 않습니다. 단지 제가 하고 싶은건 검색 엔진의 이해가 아닌 검색 엔진의 활용 방안입니다. 검색 엔진을 이해하려면 사실 루씬의 색인 파일구조를 살펴봐야 합니다. 그러나 웬만한 실력이 아니고서야 ( 저를 포함 ) 그 어려운 소스를 뜯어서 파일을 분석해낸 후 자기 것으로 이해시키기에는 어려움이 있을 것입니다. 그래서 일단은 루씬을 이용해서 검색엔진을 만들어보고, 추후에 검색과 관련된 내용을 포스팅 할까 합니다. 제가 만들 내용은 "루씬을 이용한 실시간 분산 검색 엔진"입니다..

Legacy/Lucene 2012.11.06

strtok, strtok_s, strtok_r 함수 사용하기

일반 C(gcc)를 사용하여 Token을 하는 경우에는 보통 strtok를 사용합니다. 그러나 C++(g++)을 사용하게 될 때 구현하기 귀찮아서 기존의 C라이브러리 함수를 이용하게 되는데, 개인적으로 가장 자주 사용하는 것이 strtok와 atoi입니다. 그러나 비주얼 스튜디오 2005 이후에서는 strtok를 이용하면 경고를 출력합니다. 이를 무시하고 코딩을 하는 경우가 많았는데, 이를 무시하면 찾을 수도 없는 까마득한 디버깅의 세계로 빠져들 수 있으니 조심해야합니다. strtok는 비주얼 스튜디오 6.0에서는 정상 작동하나, 그 이후 버전에서는 실행은 되지만 뒤에 쓰레기 값이 박히는 경우가 종종 발생합니다. 이를 대체하기 위해서 strtok_s를 이용하게 됩니다. 사용법은 아래 링크를 타고 가시면 ..

Legacy/C 2012.11.05

accuracy, precision, recall의 차이

자연어처리에 대한 공부를 하다보면 가장 많이 듣는 단어 중 하나는 feature이다. 그리고 항상 실험 부분에서 많이 나오는 단어는 위 제목과 같이 accuracy, precision, recall 이다. 특히 문서 분류나 검색에서 많이 사용되는 실험 척도인데, 주로 precision과 recall을 구한 뒤에 F-measure로 최종 결과를 내는 논문들이 많았다. 그리고 accuracy로 최종 결과를 내는 논문들 역시 많이 있었는데. 정확률? 재현률? 정밀도? 나 역시 많은 논문을 접하면서 쉽게 단어가 노출되어서 익히 들어왔지만 항상 그때그때 마다 헷갈리는 부분이다. 마치, 일란성 쌍둥이를 한참 들여다보고 나서야 누가 형이고, 동생인지 알 수 있는 것처럼 말이다. 이제 accuracy, precisio..

자바 HMM 라이브러리

직접 구현한 HMM 라이브러리를 오픈소스로 공개하려 합니다. 사용방법은 첨부된 pdf 파일을 참조해주시기 바랍니다. 개발실력이 거의 없다고 보시면됩니다. 그러나 연구 및 개발을 하는데 있어서 HMM을 잘 모르는데 만들어야하는 고충에 빠지신 분들과 아직 학교에서 연구에 매진중인 미래의 연구자 분들께서 사용하셨으면 좋겠습니다. 문의사항은 이메일이나 댓글로 남겨주시면 확인하는대로 답변드리겠습니다. peopleware-common 라이브러리는 hmm 구동에 필요한 내부 라이브러리로 사용되고 있습니다. 반드시 함께 import하여 사용해주시기 바랍니다. .jar 파일 설명서 https://github.com/shin285/HMM 에 가시면 다운로드 하실 수 있습니다.

Legacy/Shineware 2012.10.31

HMM (Hidden Markov Model)

컴퓨터 전공을 공부하다보면 HMM이라는 말을 자주 접하게 된다. 특히 자연어처리, 패턴인식과 같은 분야에서는 HMM에 대해서 수백번은 들어보게 된다. HMM은 위키피디아에 보면 정리가 잘 되어있다. (위키피디아 - HMM) 물론 한글로 정리를 잘 해놓으신 분도 계신다. (난다로 님의 블로그) HMM을 언제 써야하는지 왜 써야하는지는 위에 링크들을 참조하면 큰 도움을 얻을 수 있을 것이다. 필자는 블로그에서 상세히 설명 하고자 하는 것은 아니기 때문에(물론 할 능력도 안되지만..) 단순한 예를 들어서 HMM에 대한 핵심만 정리하도록 하자. 이전 사건에서 현재 사건이 올 수 있는 확률과, 현재 사건 자체가 일어날 확률을 연속적으로 계산하면 된다. 실질적인 예를 들어보자. 공대 사람이 오늘 하루를 돌아다니다가..

형태소 분석기 오픈소스

국내에는 공개적으로 사용가능한 형태소 분석기가 몇개 없습니다. 자연어처리를 전공한 사람으로써 매우 안타깝다고 생각하고 있었습니다. 비록 성능은 좋지 못하지만 기본에 충실한 어절 단위 형태소 분석기를 오픈 소스로 공개하려합니다. 유능한 개발자 분들이 만들어두신 형태소 분석기도 있지만 사전이 잘못 됐는지는 모르겠으나 대부분 명사로 추출되는 경향이 강했습니다. 물론 루씬과 같은 검색기에서 주로 사용되는 품사는 명사류입니다만, 엄연히 말하자면 형태소 분석기와 색인기(명사 추출기)는 다르다고 말씀드리고 싶습니다. 비록 개발능력은 떨어지지만 고전 방식의 형태소 분석기를 제공하도록 하겠습니다. 다양한 분야에서 널리 사용되었으면 하는 작은 바람입니다.

Legacy/Shineware 2012.10.31

시스템에 따라 다른 File.separator

보통 자바는 이클립스 기반에서 개발을 많이 하게 된다. 필자도 윈도우나 맥 위에서 이클립스를 사용한다. 유연한 프로그램을 만들기 위해서는 프로퍼티 파일을 사용하는 것이 필요한데, 필자의 경우에는 프로퍼티 파일에 특정 파일 경로는 거의 필수적으로 포함되어 있는 듯 하다. 이 때 윈도우에서 개발하고 리눅스에서 올리면 제대로 파일을 읽지 못하는 불상사가 발생한다. 물론 초보적인 실수겠지만, 태어나자마자 고수인 사람은 세상 어디에도 없을 것이다. 하나하나 찾아가고 정리해가면서 한단계 한단계 실력을 키우면 되는 것. 각설하고, File.separator를 사용하면 깔끔하게 해결된다. 사용방법은 아래와 같다. 만약 Data 밑에 Tweet.txt라는 파일을 원한다고 할 때, 윈도우는 "Data\\"Tweet.txt..

Legacy/Java 2012.10.30

상호정보량(Mutual Information)

상호정보량은 두 사건 사이가 얼마나 밀접한 관계가 있는지를 알아볼 수 있는 방법이다. 사전적인 의미로는 "사상 x의 발생을 아는 데 따라 전해지는 정보량과 다른 사상 y가 발생한다는 조건 하에서 사상 x의 발생을 아는 데 따라서 전해지는 조건 있는 정보량과의 차."( 네이버 링크 발췌 - 상호정보량 ) 말은 상당히 어렵다. 그러나 실제로는 매우 심플한 이론이다. 사건 A가 일어날 확률 : P(A)사건 B가 일어날 확률 : P(B) 이라고 할 때, 사건 A와 사건 B의 상호정보량은 아래와 같다. MI(A,B) = P(A∩B) / ( P(A)*P(B) ) 위 수식을 말로 쉽게 풀어쓴다면, 사건 A가 일어날 확률과 사건 B가 일어날 확률 중에 사건 A와 B가 동시에 일어날 확률이다. 실제 예를 들어서 설명해보..