'실용주의 프로그래머'에 해당되는 글 15건

  1. 2009.12.09 구글의 무료 DNS 서버 사용해보기
  2. 2009.12.04 최고의 영어공부 사이트 EnglishCentral.com (1)
  3. 2009.08.20 주중에 쓰는 언어, 주말에 쓰는 언어
  4. 2009.08.14 GTD wall paper
  5. 2009.07.23 글쓰기가 두려운 직장인을 위한 조언 (1)
  6. 2009.07.09 PT에 유용한 사이트
  7. 2008.08.14 에반젤리스트(Evangelist)는 뭐하는 사람?
  8. 2008.07.30 형태소 분석기에 유니코드 모듈 추가
  9. 2008.07.30 형태소 분석기 0.9.1 배포 및 라이센싱
  10. 2008.07.30 강승식 교수의 형태소분석기를 Python에서 활용하기 (1)
2009.12.09 19:39

구글의 무료 DNS 서버 사용해보기

구글에서 브라우저와 운영체제에 이어 이제 인터넷의 전화번호부 같은 DNS 서비스까지 사업 영역을 넓혔는데요.

OpenDNS의 도메인 타이포 수정 같은 다양한 기능을 제공하는 것은 아니지만 기존 ISP에서 제공하는 DNS 속도에 불만이었다면 구글의 DNS 서버 주소를 한번 테스트해 보시는 것도 괜찮을 것 같습니다. (광고 같은 것 생각 안하고 순수한 마음에서 서비스한다고 하니.. –_-)

기본 DNS 서버에 8.8.8.8, 보조 DNS 서버에 8.8.4.4를 각각 입력해 주면 되네요.

2009-12-04_092643


제대로 적용이 되었는지 확인하려면 명령 프롬프트에서 ipconfig /flushdns 입력 후 nslookup으로 아무 웹사이트를 찾아봐서 구글의 도메인 서버 정보가 나오는지를 체크해보면 됩니다.

2009-12-04_093851


아래는 TechSutra라는 블로그에서 쉘스크립트를 이용해 구글, OpenDNS, 또 다른 무료 DNS 서비스인 Level3의 4.2.2.x의 속도를 해외 몇몇 도시에서 비교한 결과인데요. 구글의 글로벌 인프라가 빵빵해서 그런지 확실히 다른 서비스에 비해 속도 면에서 월등한 결과를 보여주네요. 개인적인 체감으로도 특히 해외 웹사이트에 들어갈 때 이전에 비해 좀 더 빨라진 반응 속도를 느낄 수 있었습니다.. ^^;

2009-12-04_102204

출처 : 구글의 무료 DNS 서버 사용해보기

Trackback 0 Comment 0
2009.12.04 09:18

최고의 영어공부 사이트 EnglishCentral.com

지인의 소개의 알개된 정말 멋진 영어공부 사이트
http://EnglishCentral.com 을 소개 합니다.

얼마전 Google Ventures의 투자를 받아서 유명해 졌죠.
http://www.englishcentral.com/en/static/about  ( 회사 소개 및 투자자 안내)

직접 써 보니까 정말 쉽고 재미있게 잘 만들어졌습니다.

기본적인 기능은 매우 간단합니다.
동영상을 보면서 문장을 따라 읽는 것이죠.

[다양한 동영상]
Business, Music, Technology, Travel 등 다양한 종류의 동영상이 준비 되어 있고
사용자의 요청을 받아서 계속 추가되고 있습니다.

 

"Stay Hungry, Stay Foolish"로 유명한 스트비잡스의 스탠포드 대학교 졸업축사도 있네요.




[정말 멋진 따라 읽기 기능]
이 사이트의 가장 큰 특징은 바로 한 문장씩 따라 읽으며
마이크를 통해 발음을 녹음하고 교정해 준다는 것입니다.



한문장씩 따라 읽으며 자신의 성적을 확인하는 재미가 정말 쏠쏠합니다. ^^

매번 마우스로 클릭하는 데 불편해서 단축키가 있으면 좋겠다고 생각했는데
이미 단축키도 지원합니다.


따라서 마이크가 기본적으로 내장되어 있는 노트북 사용자들에게 유용합니다.
물론 데스크탑 PC를 사용하는 분들도 마이크를 준비하는 것이 좋겠죠.




[발음 교정]


AT&T에서 수년 간 음성인식 기술을 연구한 분이 이 회사의 CEO 이기 때문에
음성인식 기술이 매우 뛰어납니다.

예를 들어 THIS를 발음하면서 S 부분을 대충하면 빨간색으로 표시해 주고
이 때문에 점수가 B+ 입니다.



[사용자 별 점수 보기]

각 국가별로 사용자들의 점수를 볼 수 있는 메뉴 입니다.
열심히 공부하니까 이번주에는 한국에서 4등 했습니다. :)



[동영상 등록 신청]
또한 사용자가 원하는 동영상으로 교재를 만들수 있도록
동영상 등록 메뉴가 있습니다.

예를 들어 증강현실에 대해 관심이 많다면 Youyube에서 해당 동영상을 찾아서
링크를 넣고 교재로 만들어 달라고 신청하면 됩니다.

YouTube - Esquire's Augmented Reality Issue: A Tour 

혼자만 알고 있기에는 너무 멋진 영어공부 사이트 http://englishcentral.com/
여러분도 매일 매일 공부 하시고 실력을 쑥쑥 키우세요.


2009/12/03 10:35 2009/12/03 10:35

출처 : http://lovesera.com/tt/464?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+LoveseraArtOfVirtue+%28lovesera.com%3A+ART+of+VIRTUE%29
Trackback 1 Comment 1
  1. 2016.07.15 15:03 address edit & del reply

    비밀댓글입니다

2009.08.20 08:12

주중에 쓰는 언어, 주말에 쓰는 언어

Stack Overflow는 프로그래밍에 관련된 질문과 답변을 할 수 있는 웹사이트입니다. 네이버 지식인의 "내공" 비슷한 시스템과 잘 정리된 태그 기능을 가지고 있습니다.

흥미롭게도 Stack Overflow는 사용자들이 제공한 모든 컨텐트를 Creative Commons 라이센스로 공개하고 있습니다. 사용자들이 만들어낸 데이터를 꿀꺽하려는 어떤 웹사이트와는 비교되는 모습입니다.

이 데이터를 가지고 Dan Lorenc라는 사람이 요일별로 Java, C#, Python, Ruby 태그를 단 질문의 갯수가 어떻게 변하는지 통계를 냈습니다.

Java와 C# 질문의 수는 주말이 되면 눈에 띄게 감소하고, Python과 Ruby 질문의 수는 증가하고 있습니다.


출처 : http://kldp.org/node/107980

Trackback 0 Comment 0
2009.08.14 18:01

GTD wall paper


Trackback 0 Comment 0
2009.07.23 08:54

글쓰기가 두려운 직장인을 위한 조언

얼마 전 올 들어 두 번째 ‘AhnLab R&D School’이 열렸다. '연구원의 Power Writing'이라는 제목으로 '한국의 이공계는 글쓰기가 두렵다’, ‘한국의 직장인은 글쓰기가 두렵다’의 저자 임재춘 교수가 강의했다. 
 

임교수는 우리가 글을 못 쓰는 이유가 무엇인지를 가지고 말문을 열었다. 글은 크게 재미와 감동을 주는 문학적 글과 실용적 글로 나눌 수 있는데, 우리나라 교육은 재미와 감동을 주는 글짓기에 치중하여 효과적인 의사 전달에 중점을 두는 실용적 글짓기의 교육이 부족하다는 것이다.

이어서 효과적인 의사 전달을 위한 구조와 논리를 갖춘 글쓰기인 힘 글쓰기(Power Writing)와, 이를 토대로 기술 글쓰기(Technical Writing)를 잘할 수 있는 방법을 소개했다.

그에 따르면 힘 글쓰기란 의사 전달을 정확하고 쉽고 간편하게 할 수 있는 글을 쓰는 것이다. 이런 글은 주제/주장 – 근거(설명/이유) – 증명(자료/의견/사실/사례) – 주제/주장의 구조를 갖는다. 문장에 1부터 4까지 번호를 부여함으로써 글의 흐름을 설명할 수 있다. 그 흐름은 추상적인 것에서 구체적인 것으로 이동하며, 숫자가 높을수록 상세한 문장임을 의미한다. 따라서, 숫자가 올라갈수록 설득하는 힘(Power)이 상승한다.

0 – 사전준비 : 글의 목적이 무엇인가?, 상대가 누구인가?, 상대의 배경 지식은?
‘왜’ 형식의 문장인가, ‘어떻게’ 형식의 문장인가?
1 - 주제, 주장
2 - 근거 : 구체적인 뒷받침이 되는 내용. 방법, 이유
3 - 증명 : 상세한 설명이 되는 내용.
4 - 주제 강조, 주장 강조

 
힘 글쓰기에 대한 내용 중 인상 깊었던 것은 우리가 설득력 있는 실용문 작성에 어려움을 느끼는 이유였다. 근거와 증명을 하나로 섞어서 증거로 나타내기 때문에 설득력이 떨어진다는 것이다. 근거는 납득할 수 있는 추상적인 '개념'이고 증명은 추상적 개념을 눈으로 확인할 수 있는 '실체'이다. 이를 섞으면 글이 신뢰성을 상실한다.

*근거 – 납득할 수 있는 추상적인 '개념'
*증명 – 추상적 개념을 눈으로 확인할 수 있는 '실체'

예를 들어 ‘독도는 우리 땅’이라는 주장을 글로 쓴다면 근거와 증명이 다음처럼 정리될 수 있다. 근거는 역사적 지배, 실효적 지배, 법률적 무효와 같이 추상적으로 정리된 개념이다. 이러한 개념들을 뒷받침하는 증명은 지도나 문헌(자료), 사실, 전문가 의견(의견), 국제법 판례(사례)이다.

특히 주장에 대한 근거와 증명을 제시할 때 감성적인 내용, 비유는 글의 논리적 설득력을 높이지 않기 때문에 증명으로 사용하지 않도록 주의해야 한다.

말과 글은 주제/주장에 따라 근거를 어떠한 논리로 구성하느냐에 따라 크게 세 가지 논리 전개 형태로 나눌 수 있다.


A. 단순논리(기본직렬형) : 1 - 2 - 3 - 4
                주장 - 이유 - 사실/사례 – 주장 강조.
                주제 - 방법 - 자료/의견 – 주제 강조.
B. 귀납논리(귀납적 병렬형):  1- 2 - 2 - 2 - 4
C. 연역논리(대조식 병렬형): 1- (2) - 2 - 4


주제/주장(1) - 근거(2) - 증명(3) 순으로 이어지는 피라미드형 구조(귀납적 논리 구조)에 추가로 마지막 부분에 주제를 한 번 더 강조(4)하는 것이 힘 글쓰기의 기본 구조다. 글이 위에 소개된 논리 구조를 가질 경우 네다섯 문장만으로도 전체와 핵심 정보를 체계적으로 전달할 수 있다.

다음으로 기술 글쓰기에 대한 강의가 이어졌다. 기술 글쓰기는 예전에는 이공계 출신 기술자나 과학자의 글쓰기, 즉 기술보고서, 논문 및 연구보고서를 의미했다. 요즘은 모든 실용문 쓰기, 즉 공문, 회사 내 보고서, 제안서, 제품 사용설명서, 회계 및 결산 보고서까지 포함된다. 또한 기술 글쓰기(TW)는 기술 커뮤니케이션(TC) 영역까지 확대되는 추세이다. TC는 복잡하고 어려운 기술 내용을 쉽게 전달하는 기술로서 TW가 시각화, 전자 매뉴얼화함에 따라 TC로 통합되는 것이다.


기술 글
쓰기의 3대 법칙으로 읽는 사람을 고려한 글쓰기, 구조와 논리가 있는 글쓰기, 간결하고 명확한 글쓰기를 들었다.
 
읽는 사람을 고려한 글쓰기의 첫째는 어려운 전문 용어를 사용하지 않는 것이다. 둘째, 문장에 주어를 반드시 넣자. 말은 주어가 없어도 표정이나 분위기로 보완할 수 있지만 글은 읽는 사람이 앞뒤 문맥을 고려해야 이해할 수 있다. 글에서 주어는 핵심 요소이며 ‘정확’한 문장에 필수이다. 특히 기술자나 과학자의 글은 90%가 주어 때문에 오류를 범한다. 주어를 생략하거나 수동태 문장이거나 주어와 서술어가 불일치하는 것이다.

셋째, 읽는 사람을 궁금하게 만들지 말자. 초면으로 간주하여 글을 써야 한다. 읽는 사람은 똑똑하지만 정보를 모를 수 있기 때문이다. 넷째, 인칭 주어를 사용하자. 생물과 무생물이 관련된 경우에 생물을 주어로 써야 의미가 명확해진다. 다섯째, 문장은 능동태로 쓰자. 우리 글에 수동태가 많은 것은 영어의 영향인데, 영어도 요즈음은 수동태를 쓰지 말 것을 적극 권장하는 추세이다. 여섯째, 주어와 서술어의 거리를 최소화하자. 서술어가 핵심 정보이므로 빨리 제시하는 게 좋다.

기술 글쓰기의 3대 법칙 중 구조와 논리가 있는 글쓰기의 요건은 다음과 같다.
-한 개의 주제에 집중하라.
-주제는 구체적이고 명확해야 한다.
-한 문장은 한 의미만을 표현해야 한다.
-문장이 길어지면 두 문장으로 분리한다.
-겹문장은 주어와 서술어가 반복됨으로써 내용이 복잡해진다.
-홑 문장을 짧게 쓰고 최대 한 줄 반 정도로 짧게 작성한다.
 
끝으로 간결하고 명확한 글쓰기의 요건은 핵심 내용에 초점을 맞추고, 간결하고 산뜻하게 쓰는 것이다. 세익스피어는 ‘간결은 지혜의 정신’이라고 말했다. 동서고금을 막론하고 명문으로 꼽히는 글은 간결한 문체로 짧게 쓴 글이라는 점을 기억하자.

이번 강의는 짧은 시간이었지만 효과적인 의사전달을 위한 글을 쓰는 방법을 배울 수 있는 시간이었다. 임교수가 설명한 방법은 업무에 사용되는 문서, 기안, 메일뿐만 아니라 명확한 의사소통이 필요한 모든 부분에 큰 도움이 된다. 이제 남은 과제는 강의를 통해 배운 방법을 연습해 실제 학습 효과를 보여주는 것이리라. Ahn

출처 : http://blogsabo.ahnlab.com/109
 

Trackback 0 Comment 1
  1. BlogIcon 아이스티를 즐기는 여자 2009.07.23 09:02 신고 address edit & del reply

    직장생활하면서 항상 막히는 게 글쓰기더라구요.
    저도 이공계출신이라 글쓰기에는 특히 자신감이 없는데.ㅋㅋ
    잘 보고 갑니다^^

2009.07.09 00:23

PT에 유용한 사이트

PT에 유용한 사이트

Trackback 557 Comment 0
2008.08.14 08:51

에반젤리스트(Evangelist)는 뭐하는 사람?

MS 에반제리스트에 블로그들.....


----------------------------------------------------------------------------------

제가 고객분들과 만나 처음 명함을 교환할  항상 듣는 , 에반젤리스트가 뭐죠?

에반젤리스트를 번역하면 "전도사", "전도자"라고 있을 것입니다. 문득 기독교의 전도사가 머리에 떠오르십니까? 어원은 같지만 쓰임새는 많이 다릅니다.
IT
분야에서는 우리말로 별도로 번역하지 않고, 그냥 에반젤리스트라고 부르는 것이 좋을 같습니다. 저는 "해당 기술에 대한 열정을 가지고 플랫폼, 제품, 서비스의 가치를 전달하는 사람"이라고 정의를 내리고 싶습니다.

검색 엔진에 에반젤리스트를 입력하면 나오는 결과 값을 보면 야후코리아, 한국마이크로소프트, 사이베이스 등의 회사에서 에반젤리스트 호칭을 가진 사람들을 보실 있습니다. 폭넓고, 깊은 지식과 열정을 가지고 현재 보유 고객, 잠재 고객, 경쟁사 제품을 사용하는 고객을 대상으로 흥미 관심을 유발시켜 관련 제품 서비스를 테스트 해보도록 하거나 개념을 검증해 보도록 하는 촉매제 역할을 하고, 고객이 현장에서 느끼는 아쉬움 애로사항을 해결해 주는 솔루션 방향성을 제공하는 역할을 합니다.

에반젤리스트는 기술에 대한 전문가지만 교만하지 않고 도움을 필요로 하는 사람이라면 누구라도 최선을 다하여 돕는 자세가 요구됩니다. 또한, 전문 분야에 대한 깊이 있는 지식을 통해 거짓이 아닌 사실만을 이야기하려고 노력 하며, 겸손하고 친근한 응대 인간 관계를 통해 다시 만나고 싶고, 다른 고객을 소개 받을  있도록 노력하는 사람 입니다. 데모를 통해 고객, 청중이 감동 받고 가치를 쉽고 빠르게 이해하도록 돕는 능력과 많은 대중을 상대로 강연 아니라, 1:1 미팅, 글을 통한 메시지 전달 다양한 방법으로 메시지 전달을 극대화 하는 능력이 필요합니다.

현재 한국마이크로소프트에는  

엔터프라이즈 플랫폼팀 팀장: 김경윤 부장
개발자
에반젤리스트(Developer Evangelist) : 강성재 차장, 김영욱 차장, 김대우 과장, 박중석 사원
IT Pro
에반젤리스트(IT Pro Evangelist): 백승주 과장
Embedded
에반젤리스트(Embedded Evangelist): 서진호 차장
아키텍트 에반젤리스트(Architect Evangelist): 장현춘 부장 (Solution), 신현석 부장 (Infra)
플랫폼 전략 조언가(Platform Strategy Advisor): 김제우 부장, 김국현 부장
사용자 경험 에반젤리스트(UX Evangelist): 황리건 과장 근무하고 있습니다.

감사합니다.

출처 : http://blogs.msdn.com/eva/default.aspx

Trackback 0 Comment 0
2008.07.30 14:33

형태소 분석기에 유니코드 모듈 추가

운동하고 집에와서 잠시 게임으로 긴장을 풀어준 다음에 바로 코딩에 들어갔다.

간만에 하는 C언어 코딩이지만 풋~~~ 역시나 나름의 맛이 있는거 같다. ㅎㅎ



오랜만에 형태소 분석기 코딩을 하는 이유는.....???.



typos님 께서 공개된 형태소 분석기가 필요하다고 해서 썩혀 두려고 한 분석기 소스를 오랜만에 훓어 보았다. 게다가 역방향 복합명사 분해 알고리즘을 실제 적용해 보고 싶은 욕구가 불끈 솥아 올랐던것도 한몫 하기도 했다.(물론 Lucene에 붙이기 위해서이지만 14만 한국어 사전의 취약점 때문에 굉장히 망설였다.)



일단 Lucene이 유니코드 기반의 문자셋을 이용하니 그동안 완성형, 조합형 기반의 분석기 소스에 유니코드 변환 모듈을 넣을 필요가 있었다.



iconv라는 라이브러리를 쓰려고 했지만 유니코드가 어떤식으로 돌아가는지 알고 싶기도 하고 직접 손으로 만드는걸 좋아하는지라 한번 만들어 봤다.

'완성형 -> 유니코드', '조합형 -> 유니코드' 의 기능을 구현 했는데,

유니코드 변환을 하는건 '조합형 <-> 완성형' 방법하고 크게 다르지 않았다.

대강 만드는 방법을 소개하도록 하겠다.(Lucene in Action에서 테이블을 살짝 빌려왔다.ㅋ)

'조합형 -> 유니코드'의 변환은 아래 테이블을 참조하면 금방 만들 수 있다.

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
유니코드 한글 초성 배열






0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
유니코드 한글 중성 배열




(없음)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
유니코드 한글 종성 배열

한 글자의 유니코드 값 계산 법

= 0xAC00(유니코드 한글 시작점) + [초성번호]*588 + [중성번호]*28 + [종성번호]

예를들어 '가'문자의 코드를 찾으려면 공식을 이용해 찾을 수 있다.

가 = 0xAC00 + 0(초성ㄱ)*588 + 0(중성ㅏ)*28 + 0(종성(없음)) = 0xAC00

조합형의 코드표는 아래와 같다.

비트조합 (bit) 10진 코드 16진 코드 초성(순번) 중성(순번) 종성(순번)
0 0 0 0 0 0 00 미정의 미정의 미정의
0 0 0 0 1 1 01 채움 미정의 채움
0 0 0 1 0 2 02 ㄱ (0x00) 채움 ㄱ (0x00)
0 0 0 1 1 3 03 ㄲ (0x01) ㅏ (0x00) ㄲ (0x01)
0 0 1 0 0 4 04 ㄴ (0x02) ㅐ (0x01) ㄳ (0x02)
0 0 1 0 1 5 05 ㄷ (0x03) ㅑ (0x02) ㄴ (0x03)
0 0 1 1 0 6 06 ㄸ (0x04) ㅒ (0x03) ㄵ (0x04)
0 0 1 1 1 7 07 ㄹ (0x05) ㅓ (0x04) ㄶ (0x05)
0 1 0 0 0 8 08 ㅁ (0x06) 미정의 ㄷ (0x06)
0 1 0 0 1 9 09 ㅂ (0x07) 미정의 ㄹ (0x07)
0 1 0 1 0 10 0A ㅃ (0x08) ㅔ (0x05) ㄺ (0x08)
0 1 0 1 1 11 0B ㅅ (0x09) ㅕ (0x06) ㄻ (0x09)
0 1 1 0 0 12 0C ㅆ (0x0a) ㅖ (0x07) ㄼ (0x0a)
0 1 1 0 1 13 0D ㅇ (0x0b) ㅗ (0x08) ㄽ (0x0b)
0 1 1 1 0 14 0E ㅈ (0x0c) ㅘ (0x09) ㄾ (0x0c)
0 1 1 1 1 15 0F ㅉ (0x0d) ㅙ (0x0a) ㄿ (0x0d)
1 0 0 0 0 16 10 ㅊ (0x0e) 미정의 ㅀ (0x0e)
1 0 0 0 1 17 11 ㅋ (0x0f) 미정의 ㅁ (0x0f)
1 0 0 1 0 18 12 ㅌ (0x10) ㅚ (0x0b) 미정의
1 0 0 1 1 19 13 ㅍ (0x11) ㅛ (0x0c) ㅂ (0x10)
1 0 1 0 0 20 14 ㅎ (0x12) ㅜ (0x0d) ㅄ (0x11)
1 0 1 0 1 21 15 미정의 ㅝ (0x0e) ㅅ (0x12)
1 0 1 1 0 22 16 미정의 ㅞ (0x0f) ㅆ (0x13)
1 0 1 1 1 23 17 미정의 ㅟ (0x10) ㅇ (0x14)
1 1 0 0 0 24 18 미정의 미정의 ㅈ (0x15)
1 1 0 0 1 25 19 미정의 미정의 ㅊ (0x16)
1 1 0 1 0 26 1A 미정의 ㅠ (0x11) ㅋ (0x17)
1 1 0 1 1 27 1B 미정의 ㅡ (0x12) ㅌ (0x18)
1 1 1 0 0 28 1C 미정의 ㅢ (0x13) ㅍ (0x19)
1 1 1 0 1 29 1D 미정의 ㅣ (0x14) ㅎ (0x1a)
1 1 1 1 0 30 1E 미정의 미정의 미정의
1 1 1 1 1 31 1F 미정의 미정의 미정의





그래서 조합형 테이블을 약간만 이용하면 조합형과 유니코드의 mapping 배열을 만들 수 있다. 그러니까 조합형 음소값이 인덱스 값이 되고 유니코드의 조,중,종성변호가 값이 되는것이다.



이것들을 이용해서 종성의 코드변환 테이블을 만들어 보자면...



/* 조합형 한글  중성 -> 유니코드 종성으로 변환 */

static unsigned int johab_lcon_to_uni[] = {
    0, 0,                      /* (미정의), (채움) */
    1, 2, 3, 4,                /* ㄲ, ㄳ, ㄴ */
    5, 6, 7, 8, 9,             /* ㄵ, ㄶ, ㄷ, ㄹ, ㄺ */
    10, 11, 12, 13, 14,        /* ㄻ, ㄼ, ㄽ, ㄾ, ㄿ */
    15, 16, 0, 17, 18,         /* ㅀ, ㅁ, (미정의), ㅂ, ㅄ */
    19, 20, 21, 22, 23,        /* ㅅ, ㅆ, ㅇ, ㅈ, ㅊ */
    24, 25, 26, 27             /* ㅋ, ㅌ, ㅍ, ㅎ */
};


이런식으로 초성, 중성에 대한 테이블을 만들어 주고 적절하게 문자를 표현할 방법만 찾으면 '조합형->유니코드'로의 변환할 수 있는 기능을  쉽게 만들 수 있을것이다.



그리고 '완성형 -> 유니코드'로의 변환 방법은 코드자체를 맵핑 시키는 테이블이 있어야 한다. 그 테이블과 소스는 paraon님의 블로그에 상세하게 소스채로 올라와 있으니 참고 하길 바란다.



하여튼 이번 여름 휴가때 고향에서 형태소 분석기나 Lucene버전으로 포팅을 해봐야 겠다.

간단하게 체언에서 조사만 정확하게 떼어내도 성과가 괜찮을듯 한데 용언은 할수 있는 불규칙 처리만 하도록 하고....말이지....



군산대학교 랜을 몰래 쓸 수 있으려나 모르겠다. 일단 환경 조사를 해야겠음이군.


출처 : http://freesearch.pe.kr/485
Trackback 0 Comment 0
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

    비밀댓글입니다