[개발] Node & Steem #10 - 형태소 분석을 해보자. - mecab, mecab-ya 활용
가장 최근의 Node & Steem 시리즈는 약 6~7개월 전에 9편을 마지막으로 연재를 끝냈었는데 뭔가 다시 할게 생겨서 연재를 이어가봅니다. 🤓10편은 형태소 분석기 도입입니다. 지난번 @anpigon님께서도 댓글로 node.js에서의 형태소 분석 사용방법도 꽤나 궁금해하셨고 저도 안그래도 쓸일이 있어서 미루다 미루다 진행을 해봤습니다.
#1 형태소 분석이 뭐에요?
문장을 의미가 있는 가장 작은 단위로 나누는 것이죠. 예를 들어 '아버지가방에들어가신다.' 라고 있다면 ['아버지', '가', '방','에','들어가신다'] 머 이런식으로 나눈다는 거죠. 가방은 어미의 '가'와 '방'으로 나뉠수도 있고 '가방'으로 분리될 수도 있는거구요. 얼마전 @anpigon 님이 '단어구름 만들기'란 포스팅으로 재밌게 보여준바 있습니다.
#2 그래서 뭘 할건가요?
저자 별 제목의 형태소 분석을 통해 유사도가 높은 제목을 시리즈로 묶어보는 작업을 진행할 겁니다. 이 기능은 수개월 전(;;;) @forhappywomen님께서 댓글로 저자의 이전 시리즈 글을 달아주는 봇 서비스 제안을 하셨고 나름 어떻게 만들면 좋을까란 생각을 했고 제목을 명사 위주의 단어로 분리해낸 뒤 유사도, 생성일로 묶어 내면 시리즈를 나름 정확 비스무리하게 묶어낼수 있지 않을까란 생각으로 형태소 분석을 시작해보게 되었습니다.
물론 포스팅 제목을 일관되게 작성해주셔야 되는 조건이 붙을 것 같습니다.
예)
개발일기 - 자바 1편
개발일기 - 자바 2편
개발일기 - 자바 3편
...
...
이런 일관된 제목을 인식해서 묶어주고 싶었던 거죠. 코딩쪽에서 보면 좀 무식하게 팩토리얼 돌려서 문자열이 같은지 비교하는 방법도 쓸 수 있겠으나....
#3 바로 실전드갑시다. 형태소 분리부터 해보자!
오랜만이라서 쌩뚱맞겠지만 말입니다. 이전 시리즈에서 node.js의 기본적인 설정은 다 마쳤단 말입니다. 그래서 바로 형태소 분석에 들어갑니다.
우선 한글 형태소 분석기는 여러가지가 있는데 mecab-ko, 한나눔, 꼬꼬마, 루씬(아리랑), KoNLPy( @anpigon님이 사용하신 거죠), KLT, 초고속 한국어 형태소 분석기 MACH, KOMORAN 와 이것저것 많이 있네요. 저는 넷상에서 평가가 괜찮아보이는 mecab-ko를 이용해보기로 했습니다.
mecab-ko는 일본어 형태소 분석기인 MeCab을 기반으로 개발된 한국어 형태소 분석기 입니다.
1. 뭘로 사용할지 정했으면 처음엔 설치지요~
1-1 Mac 설치
brew install mecab-ko
brew install mecab-ko-dic
해주니 지혼자 다운받고 설치까지 해줍디다. 맥은 참 편리하군요.
설치가 완료되면 이렇게 확인을 해주고...
mecab 아버지가방에들어가신다
1-2 리눅스 설치
$ wget https://bitbucket.org/eunjeon/mecab-ko/downloads/mecab-0.996-ko-0.9.2.tar.gz
$ wget https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-2.0.1-20150920.tar.gz
$ gzip -d .gz
$ tar xvf mecab.tar
$ cd mecab-[version]
$ ./configure
$ make
$ make install
$ cd mecab-ko-dic-[version]
$ ./autogen.sh mecab
$ ./configure
$ make
$ make install
1-3 윈도우는 공식적으로는 지원하지 않음.
하지만 넷상에 검색해보니 이미 윈도우용 빌드 환경 프로젝트를 구성해서 성공했다는 글이 몇몇 보이니 그대로 따라 진행해보면 될듯 합니다.
2. 설치가 끝났으니 프로젝트 내에서 형태소 분석기를 사용할 수 있는 라이브러리 설치.
한국 능력자분이신것 같은데 https://github.com/golbin/node-mecab-ya 이런 좋은 라이브러리를 만들어두셨다. 기쁜 마음으로 가져다가 사용하자. 깃헙에 사용방법까지 친절하게 설명해주니 좋게 좋게 따라가자. 아장아장~
npm install mecab-ya
그다음 엔진과 언어팩 같은것을 설치한다.
$ node_modules/mecab-ya/bin/install-mecab
$ node_modules/mecab-ya/bin/install-mecab ko
여기서 mecab를 설치하는 것 보니 앞서 mecab를 설치하지 않아도 동작이 잘 될것이라 생각이 드는 군요. 사실 mecab-ffi 라이브러리를 쓰려다 실패하고 mecab-ya로 건너왔습니다요.
3. 세상 간단한 샘플 만들기.
var mecab = require('mecab-ya');
var text = '아버지가방에들어가신다';
mecab.pos(text, function (err, result) {
console.log(result);
});
mecab.morphs(text, function (err, result) {
console.log(result);
});
mecab.nouns(text, function (err, result) {
console.log(result);
});
요래 해놓고 실행을 하면...?
오...올...꽤나 보람차구만... 이번 글 제목으로 바꿔서도 한번 해봅시다.
요렇게... 텍스트만 바꾸고 다시 돌리면...?
흠 ... 아무래도 스팀 api를 접목시키고 마무리 지어야겠다는 생각이 듭니다. 시리즈물을 발생하는 계정을 모셔서 최근글 제목을 뽑아서 형태소 분석하는 것을 만들고 이번 글을 끝마치도록 합시다.
이번 글에서는 시리즈물을 연재하는 대표적 계정 중 하나인 @keepit의 글 제목을 형태소 분석처리해보도록 하겄습니다.
//일단 콜백 탈출을 위해 fiber로 한번 싸주고...
function pos(text){
var result = await(mecab.pos(text, defer()));
return result;
}
var steem = require("./test_steem.js")();
var author = 'keepit';
function getDiscussionsByAuthorBeforeDate(author){
steem.api.getDiscussionsByAuthorBeforeDate(author, null, '2100-01-01T00:00:00', 30, function(err, result ){
//console.log(err, result);
fiber(function() {
for(var i = 0; i < result.length;i++){
var resultMecab = pos(result[i].title);
console.log(result[i].title, resultMecab);
}
}); // end fiber..
});
}
getDiscussionsByAuthorBeforeDate(author);
@keepit 최신 글 30개의 제목과 형태소 분석 결과를 출력하는 샘플.
이제 이것들 제목들을 디비화 시키고 형태소 화 시킨 것들의 유사도를 측정해보고 문서 생성일자 등을 조합하여 시리즈 물 별로 묶을 수 있으면 될것 같은데. 케이스가 너무 많아서 잘 될지 안될지 아직 잘 모르겠네요.
오랜만에 기능 홍보합니다.
@steem.apps 봇에는 구글 검색 기능이 내장되어있다.
- '@검색 검색어' 댓글을 아무곳에서 입력한다해도 결과를 댓글로 달아줍니다. ㅎㅎ
- 제가 신경쓰지 않더라도 수수료 없이 아직도 계정을 열심히 만들고 있네요.수수료 내지 마시고 만드시길 바랍니다~
Node & Steem - 지난 회차 살펴보기
1편 - nodejs 개발환경을 구성해보자. 윈도우 개발 + Github 저장소 + 리눅스 운영
2편 - 콜백 지옥을 탈출해보자. - synchronize.js 편
3편 - 로깅 처리와 DB(mysql)설치 및 설정
4편 - DB 설정과 운영서버까지 설정 마무으리!
5편 리스팀 알림 봇을 만들어볼까? #1
6편 리스팀 알림 봇을 만들어볼까? #2 whitelist 데이터 수집
7편 리스팀 댓글 알림 봇 #3 시범오픈과 구현 마무으리!
8편 - 간단한 서버 관리 다섯가지 팁 - 쉘 접속과 alias 지정 등
9편 - 스팀 노드 서비스 연결이 끓어질 때 해결방법 + 리스팀 목록 확인 명령 추가
참고 글
https://proinlab.com/archives/1935
http://www.ministory.net/xe/229029
https://github.com/golbin/node-mecab-ya
Leave [개발] Node & Steem #10 - 형태소 분석을 해보자. - mecab, mecab-ya 활용 to:
Read more #kr-dev posts
Best Posts From nhj12311
We have not curated any of nhj12311's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.
More Posts From nhj12311
- 스팀잇 신조어 '보클'은 어뷰징 행위에 해당하는 것이 아닐까요?
- 유머, 귀염, 감동 각종 짤 방출(데이터 주의)
- 신규 가입자를 위한 계정 생성 중개 서비스가 있다면 어떨까?
- 대역폭 문제는 과거에도 있었다.
- [개발] HF20 관련 steem.apps 사이트 - RC 퍼센트와 회복 시간 추가
- 정말 대단한 하드포크다. - 500 스파 계정은 댓글 20개 달고 끝?
- [개발] 업비트 api로 직장인을 위한 코인질 같지 않은 업비트 시세조회 개발
- [개발] Node & Steem #11 - 글 아카이브 기능으로서의 첫 걸음. 포스팅 분류하기.
- [개발] Node & Steem #10 - 형태소 분석을 해보자. - mecab, mecab-ya 활용
- 새벽에 컴터를 하는데 시끄러워 살펴보니 소방차들이 몰려와있다.