[개발] Node & Steem #11 - 글 아카이브 기능으로서의 첫 걸음. 포스팅 분류하기.

in #kr-dev6 years ago

지난번 형태소 분석을 하여 시리즈 별로 묶어보겠다라는 얘길 하고서 집에서 이래저래 많이 돌려봤지만 ai 엔진을 사용하든 딥러닝을 시도해보든 도저히 제대로 묶어낼 방도가 없다는 걸 깨달았습니다. 우선은 앞 단어가 같은 시리즈 들이 있을 때 하나의 분류로 등재를 하면서 메뉴얼로 저자 또는 독자가 시리즈 목록을 댓글로 추가 또는 삭제할 수 있도록 만들어야겠다는 구상을 했습니다.

앞서서 이 기능을 만들게 된 히스토리는... 어느날 @forhappywomen님이 ...

제안해주신 기능은 태그를 인식하여 포스팅을 분류하여 이전글과 다음글, 그리고 관련 글을 찾아서 댓글로 달아주는 봇이었습니다. 헌데 문제는 기존 글은 수정을 할수가 없다는 치명적인 단점이 있고 일반적으로 태그보다는 제목을 통일해서 글을 쓴다는 점이 있어 글 제목을 가지고 분류해야겠다는 생각이 들었습니다.

저 또한 특정 저자의 예전 글을 찾으려고 하는데 너무 오랜 시간이 지나 포스트가 밀려있어 스크롤을 하다가 포기하게 되는 경우가 있더란 말입니다. 글이 몇달 지난것만 암만 찾으려 해봐도 찾을수가 없습니다. 스팀잇이 스크롤 시간이 정말 길어 하다가 지치기 마련이죠.

먼저 프로토 타입 기능을 만들었습니다.

일단 제목을 가지고 시리즈 물을 연재하는 이런 저런 유저들을 대상으로 프로토타입 기능을 만든 상태입니다. 시리즈를 인식하는 기능은 얼추 된것 같습니다. 얼추입니다. 얼추. 프로토 타입의 기능을 한번 봐보죠. 첫번째로 기능을 의뢰하신 @forhappywomen님이 다음 '임-준-출' 20화 시리즈 글을 발행한다고 한다면 이렇게 기능 호출을 하게 되겠죠. 명칭은 기존 스팀 api 의 명칭과 비슷하게 제목으로 포스팅들을 가져온다는 뜻으로 'getContentsByTitle'로 짓고...

실제로 지금 현재 제 pc에 api로 만들어놓은 것입니다.

그럼 제 봇은 @forhappywomen님의 모든 글의 제목을 읽어서 같은 제목을 인식하여 이런 리스트를 댓글로 달아줍니다.

한번더 제 계정으로 테스트를 해보겠습니다. 곧 포스팅될 이 글의 제목은 '[개발] Node & Steem #11 - 포스팅 아카이브 기능으로서의 첫 걸음. 포스팅 분류하기.'가 될겁니다.

결과는...

시리즈를 가져오는 방식은 어찌 되는가?

이런식으로 제목이 일치하는 시리즈는 잘 가져오게 되었습니다. 시리즈는 글 제목 앞에서부터 형태소 3가지 이상의 조합부터 시리즈 제목으로 인식을 하게 됩니다. 많이들 사용하는 '[제목]'의 형태부터 인식 할수 있습니다. 인식을 시키다보니 제목을 통일시키지 않았던 시리즈가 간혹 껴있습니다. 그렇습니다. 이 기능이 완벽해지기 위해서는 자동 인식과 '메뉴얼' 수동 인식 과정이 필요합니다.

글 초입에 이야기 했던 저자 혹은 타 유저가 댓글을 통해서 글 분류를 도와주게끔 하려는 생각이죠. 댓글로 url을 추가하는 방식으로 봇이 댓글을 인식해서 시리즈에 강제로 추가 및 삭제하는 식으로 처리하면 될 것 같습니다. 따라서 별도 관리 디비가 필요하게 됩니다. 우선 자동인식 기능부터 사용할 수 있도록 오픈하고 차차 개선해나가도록 하면 좋을 것 같습니다.

예) 댓글로 @시리즈추가(혹은 삭제) https://steemit.com/@nhj12311/abcd

시리즈를 뽑아내는 api는 얼추 만들어냈으니 다음 과정으로 해당 서비스를 해야할 조건을 생각해봐야겠습니다.

첫째로는 아무래도 전통적인 방식인 태그를 인식하면 좋을 것 같습니다. #steem-apps 태그를 인식하도록 하겠습니다. 실제 태그 말고 본문에 넣기만 해도 인식하도록 해서 실제로 등록할 태그의 갯수를 차지하지 않도록 합니다.

두번째로 댓글명령어를 통한 인식 방법입니다. '@시리즈' 정도면 될 듯 합니다. 저자든 독자든 입력하면 시리즈물을 댓글로 달아주게 합니다.

[시리즈 가져오기 API 구현 방식]

좀 재미없는 실제 api 구현 방식에 대한 얘기입니다. 그렇습니다. 기본적으로 시리즈물을 찾기 위해서 반복적으로 더하면서 추립니다. 처음에는 세개의 형태소 조합으로 그룹을 지어봅니다. 현재 제목과 동일 형태로 그룹이 나온다면 일단 기본 시리즈가 있는 거고 한개의 형태소씩 더하면서 범위를 좁혀나갑니다.

1. 첫번째. '[' + '개발' + ']' 조합으로 글 제목을 추려봄.

'[개발]' 시리즈 : 96개

2. 두번째 '[개발]'+node 로 추려봄.

'[개발] node' 시리즈 : 15개

3. 세번째 : 똑같이 ...

'[개발] node & fire' 시리즈 : 0개

이렇게 제목을 덧붙여나가면서 0개가 되기 이전 것, 그러니 2번 15개를 인식하게 됩니다. 그렇다고 무한히 나갈수는 없으니 현재는 형태소 최소 3개에서 최대 8~9개 조합까지만 인식하도록 해두었습니다. 그 이상은 거의 없는 듯 합니다. 세세한 조건들을 몇가지 더 준게 있긴 한데 핵심인식 방법은 이렇게 간단합니다. 아마 실제로 샘플링을 다양하게 돌려보고 좀 더 디테일한 요소들을 추가해야 될것 같아 보입니다.

본 api의 전체 소스는 github에 올려두었습니다. https://github.com/nhj12311/steem_nhj/blob/master/test/test_mecab_ko.js
이전 포스팅의 synchronize가 설치 되어 있어야 돌아갑니다. (2편 참조) 해당 소스의 맨 밑을 보면 몇몇 이들로 테스트를 한것을 볼 수 있습니다. 테스트는 많으면 많을 수록 좋습니다.

오늘은 시리즈 추출하는 api를 만든것에 만족하고 다음에 실제 프로그램에 api를 녹이고 봇이 시리즈물 댓글을 달아줄수 있도록 기능구현해봐야겠습니다.


Node & Steem - 지난 회차 살펴보기
1편 - nodejs 개발환경을 구성해보자. 윈도우 개발 + Github 저장소 + 리눅스 운영
2편 - 콜백 지옥을 탈출해보자. - synchronize.js 편
3편 - 로깅 처리와 DB(mysql)설치 및 설정
4편 - DB 설정과 운영서버까지 설정 마무으리!
5편 리스팀 알림 봇을 만들어볼까? #1
6편 리스팀 알림 봇을 만들어볼까? #2 whitelist 데이터 수집
7편 리스팀 댓글 알림 봇 #3 시범오픈과 구현 마무으리!
8편 - 간단한 서버 관리 다섯가지 팁 - 쉘 접속과 alias 지정 등
9편 - 스팀 노드 서비스 연결이 끓어질 때 해결방법 + 리스팀 목록 확인 명령 추가
10편 - 형태소 분석을 해보자. - mecab, mecab-ya 활용




Sort:  

어흑 곰돌이가 수동으로 보팅하다 엉뚱한 글에 했네요ㅎㅎ @anpigon님 감사 보팅하다가 리스팀감지를 못했네요. @gomdory에는 리스팀감지, 보상거절글 감지 다 되어있는데ㅠㅠ @nhj12311님도 개발자시니 이럴때 보너스 보팅ㅎㅎ 추석 잘 보내세요~

@시리즈

@시리즈

@시리즈

nhj12311님은 멋진걸 만들고 계시군요. 빨리 사용해보고 싶어요.ㅎㅎ
그리고 소스 공개해주셔서 감사합니다.

Posted using Partiko Android

전 유사게시물 찾는거 완전 좋아보여요.

nhj12311님 글을 읽고 나니 저도 포스팅 분류하는게 하고 싶어졌어요.ㅋ
아이디어를 주셔서 감사합니다. 해보고 저도 포스팅 올릴께요.

ㅋㅋㅋ 코딩경연대회 같이 ㅎㅎㅎ 어떤 버전이 나올지 심히 기대됩니다.

@anpigon @nhj12311 두분 모두 화이팅입니다. 재밌는거 많이 만들어주세요!

ㅎㅎㅎ 감사합니다.

Posted using Partiko Android

한번 따라해보고 싶어지네요 ~~ 좋은 정보 감사드립니다.
분명 컴공과였는데 지금은 hello world도 어렵게 느껴지는 1인이라 ~~

막상해보시면 금방 엑셀 다루듯이 하시게 될겁니다. ㅋㅋㅋ

굉장히 유용한 기능이네요!

Congratulations @nhj12311! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

Award for the number of comments

Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word STOP

Support SteemitBoard's project! Vote for its witness and get one more award!

#series 댓글에도 태그가 적용되는건가용?

#series 댓글에도 태그가 적용되는건가용?

#series 댓글에도 태그가 적용되는건가용?

#series 댓글에도 태그가 적용되는건가용?

개발하시는 것들이 실제 정말 유용한 것이라 늘 사용하고 있어요.
감사하고 해피 추석 되세요~^^

주노님 명절 잘 보내세요. ^^ 잘 써주시는 분들의 이런 한마디 한마디가 보상보다 더 큰 힘이 됩니다. 감사합니다.

오! 재밌는 것을 시도하시는 군요.
스티미언 활동에 도움이 될 듯 싶네요.

저도 중국어시리즈 찾고싶어요
ㅋㅋㅋㅋ 찾아보기가 넘 불편해염

Coin Marketplace

STEEM 0.17
TRX 0.13
JST 0.029
BTC 56373.71
ETH 2972.37
USDT 1.00
SBD 2.12