6. Slack Bot?
Slack Bot
1.RTM(Real Time Messaging) API 를 통해서 원하는 형태의 봇을 제작 가능.
2.최소한의 Input/Output 로직을 제공.
3.너무 간단하게 사용할 수 있어서 사실상 모든 언어에서 다 사용 가능.
(PHP가 되면 다 된다고 보면 됨)
7. 왜 시작하게 되었나요?
Slack Bot
1.업무에 필요한 로직들을 누구나 실행할 수 있었으면..
2.배포도 해주었으면..
3.야근할 때 떠들 사람이 필요해서.. (저희 회사는 야근을 하지 않습니다. 진짜로.)
8. 왜 PHP로 만들었어요?
Slack Bot
1.RTM API는 비동기로직이라 Node.js로 작성하면 훨씬 만들기 편해요.
2.자연어 처리나 인공지능은 Python, Java으로 하면 훨씬 좋아요.
3.그런데 왜 PHP로…
9. 왜 PHP로 만들었어요?
Slack Bot
1.RTM API는 비동기로직이라 Node.js로 작성하면 훨씬 만들기 편해요.
2.자연어 처리나 인공지능은 Python, Java으로 하면 훨씬 좋아요.
3.그런데 왜 PHP로…
여기가 Modern PUG 잖아요.
10. 왜 PHP로 만들었어요?
Slack Bot
1.RTM API는 비동기로직이라 Node.js로 작성하면 훨씬 만들기 편해요.
2.자연어 처리나 인공지능은 Python, Java으로 하면 훨씬 좋아요.
3.그런데 왜 PHP로…
언어는 도구일 뿐
13. 동작원리
Slack RTM API
1.채널에 봇을 초대합니다.
2.그 채널에 메시지가 올라옵니다.
3.Slack이 메시지를 Client로 전송합니다. (API)
4.Client에서 프로그램 로직이 동작합니다.
5.Slack Server로 응답을 보냅니다. (API)
Client
Slack
Server
채널에서 들은 모든 글
응답
14. 동작원리
Slack RTM API
1.채널에 봇을 초대합니다.
2.그 채널에 메시지가 올라옵니다.
3.Slack이 메시지를 Client로 전송합니다. (API)
4.Client에서 프로그램 로직이 동작합니다.
5.Slack Server로 응답을 보냅니다. (API)
Client
Slack
Server
채널에서 들은 모든 글
응답
PHP로 소켓을 제어할 수 있어요…?
19. Composer Package
Slack RTM API
1.coderstephen/slack-client 패키지 사용.
(https://github.com/sagebind/slack-client)
2.composer의 minimal-stability 설정을 dev로 설정.
20. <?php
use ReactEventLoopFactory;
use SlackPayload;
use SlackRealTimeClient;
require __DIR__ . '/vendor/autoload.php';
$loop = Factory::create();
$client = new RealTimeClient($loop);
$client->setToken(‘xoxb-...’);
$client->connect()->then(function () use ($client) {
$client->on('message', function (Payload $payload) {
print_r($payload);
});
});
$loop->run();
빠르게 작성해봅시다.
31. 어떻게 접근해 볼 수 있을까
자연어처리
1.알다시피, “===“를 통해 비교하면 우리의 봇은 우리가 오타라도 나면 벙어리가 됩니다.
2.제대로 NLP(Natural Language Processing)를 하려면 굉장히 어렵습니다.
3.그치만 조금만 다르게 생각해봅시다. 어쩌면 우린 이미 답을 알고 있을 수도 있습니다.
35. 검색엔진을 알아보자
자연어처리
1.검색엔진을 깔아서 사브작사브작하면 문제 해결이 됩니다.
2.그치만, 검색엔진이 해결하는 문제와 우리가 해결하는 문제
는 다릅니다.
3.검색엔진은 긴 문장들로 이루어진 문서들을 찾습니다.
4.봇은 기존에 알고있는 문장을 찾습니다.
(왠지 더 쉬울 것 같다!)
마늘아
마늘아 뭐하니
마늘아 밥 추천좀
마늘아 오늘의 날씨
“마늘아 밥 추천좀”
그림. 쿼리를 가지고 알고있는 문장을 찾습니다.
36. 검색엔진을 알아보자
자연어처리
1.검색엔진을 깔아서 사브작사브작하면 문제 해결이 됩니다.
2.그치만, 검색엔진이 해결하는 문제와 우리가 해결하는 문제
는 다릅니다.
3.검색엔진은 긴 문장들로 이루어진 문서들을 찾습니다.
4.봇은 기존에 알고있는 문장을 찾습니다.
(왠지 더 쉬울 것 같다!)
마늘아
마늘아 뭐하니
마늘아 밥 추천좀
마늘아 오늘의 날씨
“마늘아 밥 추천좀”
그림. 쿼리를 가지고 알고있는 문장을 찾습니다.
검색엔진은 여기가 문서
44. MeCab
형태소 분석기
1.MeCab은 일본어 라이브러리라서 문서가 다 일본어로 나와요.
2.php5.x와 7.x의 동작방식이 달라요.
3.https://github.com/wandu/mecab (제가 이미 다 해놨습니다.)
• MeCab Wrapping Library.
45. <?php
use WanduMecabMecab;
require __DIR__ .'/vendor/autoload.php';
$mecab = new Mecab('/usr/local/lib/mecab/dic/mecab-ko-dic');
print_r($mecab->parseToString('흠. 한글 형태소 분석기는 어떻게 동작할까요.'));
54. Jaccard Similarity
유사도
1.또 집합이 많아지면 유사도를 계산하는데 엄청나게 많은 시간을 소요합니다.
(봇한테 말을 걸었는데 10분후에 답장이 오는 그런 사태..)
2.이 시간을 줄이기 위해 MinHash라는 기법을 사용합니다.
3.일종의 클러스터링기법.
4.블로그에 자세히 설명해놨습니다. (http://blog.wani.kr/posts/2016/11/24/minhash)