[자동 보팅 봇 만들기-3] 화이트 리스트, 블랙 리스트! 키워드로 필터링하기 with Python

in #kr-dev7 years ago

안녕하세요, @tmkor 입니다. 좀 더 똑똑한 자동 보팅을 위해, 화이트 리스트와 블랙 리스트로 필터링하는 방법을 알아봅시다.

화이트 리스트란?

화이트 리스트는 행동을 취하기 위해 필요한 키워드의 집합입니다. 예를 들자면..



[평화를 불러오기 위해선 '마사' 한마디면 충분]

라던가,



[우주명작 바이오쇼크는 저 3단어로 조종당하는 사람의 일대기를 다룹죠. would you kindly vote?]

이런 것처럼, 특정한 키워드를 들었을 행동을 취하는 것들의 집합이 화이트 리스트 입니다.

블랙 리스트란?

화이트 리스트의 반대입니다. 특정한 키워드를 들었을 때, 아무런 행동을 취하지 않는 것 입니다. 혹은 음(negative)적인 행동을 하기도 하지요.

예를 들자면,



[설마했던 그런 일이 있었죠]

뭐.. 이런거겠죠..

코딩 타임~

1. 보팅 규칙 확장

먼저 보팅 규칙을 확장해봅시다. 우리에게 추가적으로 필요한 것은 화이트 리스트, 블랙 리스트 단어 집합입니다. 그리고 문서는 제목과, 본문으로 이루어져 있으므로 이들 각각에 대해서 받도록 합시다.

"rule":[
        {"id":"tmkor",
        "mode":"vote",
        "delay":5,
        "title_white":[],
        "title_black":[],
        "body_white":[],
        "body_black":[]}
    ],

예를 들어, @shiho 님의 [척] 시리즈를 보팅하고 싶다면 idshiho title_white["[척]"] 이렇게 입력받으면 되겠지요. 혹은 @twinbraid 님의 이더레이싱 혹은 이더 연예인 시리즈가 너무 슬퍼 빨리 빠져나오시게 보팅을 안하려고 한다면 idtwinbraid, body_black에 `["이더레이싱", "이더 연예인"] 이런식의 입력을 받게 됩니다.

2. 블랙리스트, 화이트리스트 처리 규칙

블랙리스트는 리스트에 포함된 어떠한 단어라도 1개 이상 나타나면 아웃입니다. 즉, 한정명제 중 존재명제(existential proposition)를 이용하면 됩니다. 반대로 화이트 리스트는 전칭명제(universal proposition)를 이용하면 됩니다.

이를 코드로 표현하면..

def universal(W, text):
    if len(W) == 0:
        return True # for whitelist check
    return reduce(lambda x,y:x&y,map(lambda w:w in text, W))

def existential(W, text):
    if (len(W) == 0):
        return False # for blacklist check
    return reduce(lambda x,y:x|y,map(lambda w:w in text, W))

def white_black_check(post,rule):
    t, b = get_title_body(post)
    white = universal(rule['title_white'],t) & universal(rule['body_white'],b)
    black = existential(rule['title_black'],t) | existential(rule['body_black'],b)
    return white and not black

이렇게 됩니다.

결론

화이트 리스트와 블랙 리스트를 이용하면 자동 보팅을 좀 더 똑똑하게 만들 수 있습니다. 물론, 사용자가 지정해놓은 키워드로 움직이니 제한적이긴 하지만, 만약에 마음에 드시는 작가님의 연재글이 있다고 하면 정기적인 후원이 가능해집니다.

참고자료

Sort:  

Very nice...

좋은 설명감사합니다^^

아앗; 사실 설명 하다가 넘어간 부분이 많은데.. 더 궁금하신 점 있으시면 댓글 부탁드려요 ^^;

tmkor , you came out of nowhere and you are killing it in Steem with stunning content. This truly shows that when one is dedicated success does not take long to follow.

tmkor is a straight shooter and I am glad to see that he continues to give solid advice.

우와 봇을 만들어 낼수 있었던 거군요 ㅋ 전혀 몰랐네요

블록체인은 기본적으로 API가 공개되어 있습니다. API는 사람이 아닌 프로그램도 사용할 수 있게 만들어줍니다. 그래서 작게 보면 봇을 만들 수 있는 것이고, 크게보면 IoT와 같은 기계들 간의 인터렉션에서 경제적 가치를 주고받을 수 있습니다. ^^

우주명작 바이오쇼크라는게 있군요! 찾아봐야겠습니다. 좋은 정보 감사합니다.

아우! 이거 나온지는 한참 된 게임인데, 아주그냥 우주 명작입니다. 리뷰중에 기억나는게.. 게임이 예술의 경지로 올라갈 수 있다. 에요. 특히 반전이 좋은데 생각해보니 포스팅에서 스포일러 가득 해버렸....

이런거 배워두면 쓸모있겠어요ㅋ

예, 반복적인 작업이 있다면 프로그램에게 양보하는 것이 좋은 방법입니다. ^^;

정말 잘 보았습니다~
참고해서 저도 시간날때 도전해 보도록 하겠습니다.

화이팅임돠! ^^

개발잘 하시네요. 질문있어요. 위에 나오는 것과 같이 소스코드 글에 넣을려면 어떻게 하면 되나요? mark 좀 알려주세요.

코드 블럭은 역따옴표 3개( "```")로 블록을 만들면 됩니다.
https://help.github.com/articles/creating-and-highlighting-code-blocks/ 참고하시면 됩니다!

이런 것이 가능한 세상이라니 ...
스팀잇 정말 멋진 곳입니다.

저도 python 배워봐야겠습니다.

감사합니다. ^.^;;

API가 잘 만들어져 있어서 원하는 것을 만들기 편합니다.
python은 애정하는 프로그래밍 언어입니다. 한번 해보시면 재미 있으실 거에요!

2주째 스팀봇 만들면서 헤매는 중인데 좋은 자료를 많이 올려두셨군요ㅎㅎ 감사합니다

개발은 항상 추천 드립니다. 혹시 막히시는 것 있으면 언제든지 글 남겨주세요~ 혹시 제가 아는거라면 도와드리겠습니다. :D