(SlackBot) 古見さんとすこしだけ仲良くなった
新機能
古見さんとちょっと仲良くなった
- -> なにか一緒にしようって言うとやりたい感じの反応を返してくれるようになった。
かわいい。
gistcc48ee3542c3f70c3df34656875150e8
(コードがドンドン長くなってくのでここからはgistのリンクだけになるよ。)
スクショ
しかし問題がある。
これじゃ大変スケベでよろしくないので卑猥フィルタを実装する。
卑猥フィルタ
1. 卑猥ワードリストでフィルタ
予めテキストファイルでスケベワードリストを作ってフィルタをかけてみた
スケベワードが来ると理解が追いつかず石になっちゃう様のナレーションが入る
ソース
gist5f1768f59707f09b0afa098415655617
(wordlist.txtには適当に弾きたいワードが入ってる)
しかし、コレではBot製作者が言ってほしくないワードに反応するだけのただのロボットである。
2. 検索エンジンに判断させてみる
ワードリストを使わない手法として検索エンジンを使う方法を思いついた。手順は以下の通り
1. 古見さんに対して「~しよう」の構文で投げられた言葉に対して「~」をWebで検索する
2. 検索によって得られた検索結果の件数を覚えておく
3. エロコンテンツにフィルタをかけて再度「~」で検索する
4. 今回得られた検索結果の件数と、2で覚えておいた検索結果の件数で差を計る。
5. 得られた差が閾値より大きかったらエロだよ!って判断する
(閾値はてきとう。今回は倍以上離れてたらエロってした。)
課題: リクエスト数
なんか検索エンジンのAPI使おうとすると軒並み制限が厳しいっぽい。
参考: 無料で使える画像検索APIとリクエスト数制限まとめ - Qiita
とりあえず自分の知ってる強そうな検索エンジンだとGoogleとBingかなあとおもって比較
この事からちょっとはBing有利かなと思って、画面からセーフサーチ「オフ」と「厳しめ」で比較してみると、
セーフサーチ オフ(アダルトコンテンツ出すモード)
セーフサーチ 厳しめ(いやらしそうなのは許さない)
Bingお前マジか…
ってことで今回はGoogle APIを使うぞ!!!Googleサイコー!!!!
Google Custom Search APIを使う
このブログのとおりに進めた
google custom search engine(CSE)を使って、検索結果をjsonで取得する - ryutamaki
やったこと
1. Google Custom search API keyの取得・設定
2. Custom search engine IDの作成・設定
https://www.googleapis.com/customsearch/v1?key={API_KEY}&cx={CUSTOM SEARCH ENGINE ID}&q={SEARCH_WORDS}
こんなので試せる
RubyでAPIを叩く
これも以下のQiita記事
http://qiita.com/mogulla3/items/a4bff2e569dfa7da1896
スケベワード反応フィルタその2
ソース
gistf4d75dabda3a5b28cf8b865f0b6e4630
結果
古見さんが自分で判断してすることを決めてくれるようになった…感動する…
ところが、「ゲームしてからスケベしよう」とかいうと喜んじゃう。
これじゃ何個も言われると判断できないアホの子だ。これもよくない。
形態素解析を使って名詞だけで検索して比較
Mecabを使って名詞だけを取り出す。
mecabとは
MeCabは 京都大学情報学研究科−日本電信電話株式会社コミュニケーション科学基礎研究所 共同研究ユニットプロジェクトを通じて開発されたオープンソース 形態素解析エンジンです。 言語, 辞書,コーパスに依存しない汎用的な設計を 基本方針としています。 パラメータの推定に Conditional Random Fields (CRF) を用 いており, ChaSenが採用している 隠れマルコフモデルに比べ性能が向上しています。また、平均的に ChaSen, Juman, KAKASIより高速に動作します。 ちなみに和布蕪(めかぶ)は, 作者の好物です。
こんなことができます。
例: ゲームしよう
コレを使って、
「ゲームしてからスケベしよう」=> 「ゲーム スケベ」
にしたい
mecab
インストールするまで
インストールしたらmecabって打つと立ち上がるので、上のサンプルみたいにゲームしようとか打つと上のサンプルみたいな結果が得られる
こんなのもあるみたいですね
mecab-ipadic-neologd
http://diary.overlasting.net/2015-03-13-1.html
mecabのipadicより強い辞書
Rubyでmecab
gemコマンドで入る
$gem install mecab
ゲームしてからスケベしようから名詞だけ取り出す
gist99540c9fa26ef64a291987283fdb7952
できた。続いて古見さんに組み込む。
gistb350e265f654d1b8e25e53ae75f43359
さあ動け!
ダメみたいですね。
今回は古見さんはエッチでしたということで…
github
まとめ
- 卑猥フィルタを実装した(精度を上げるのが課題っぽい)
- google Custom search APIを使った
ドキュメントが読みたらないのでブラウザで見れる様なTotalResultを取ってくる手段が分からん
(なぜかフィルターを厳しくすると検索結果の件数がでかくなることがある。) - mecabを使った
製作者に感謝
感想
知らないことだらけで調べては真似してるからツギハギになってコードがすごいことになってしまった。
だいたいのことは先人がうまくやってるもんなんで調べればなんでも出てくるのはすごいなと思った。
きっとエロワードデータベースとかもあったりするんだろうなーなんて思ったけど結局見つかんなかったしググり力足りてない。
(ニコニコのコメントとかその辺のチャットツールとかって不適切な表現のフィルタリングとかどうしてるんだろ)