顔文字を集める話をしました。 名古屋Ruby会議04で使用したスライドです。
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 1/31顔文字を顔文字を3万個集める技術3万個集める技術永和亭 色箱@color_box
View Slide
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 2/31気をつけよう気をつけよう夏の暑さと夏の暑さと並列処理並列処理色箱
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 3/31集めた顔文字集めた顔文字
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 4/31
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 5/31動機動機知らないもののことを知りたいし集めたい収集用のアプリ作成がおもしろそう
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 6/31結果結果約60万の顔文字を収集完了約60万の顔文字を収集完了ノイズ、重複除去で5%程度残ると推定ノイズ、重複除去で5%程度残ると推定
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 7/31約3万約3万の顔文字を収集の顔文字を収集(・3・)b
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 8/31集め方集め方1. ツイートを集める2. ツイートから顔文字を抽出する( ‘ᾥ’ )シンプル
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 9/31TwitterTwitterからツイートを集めるからツイートを集める
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 10/31ユーザーの収集ユーザーの収集顔文字紹介アカウントのフォロワー顔文字紹介アカウントのフォロワー顔文字使用頻度の高いアカウントのフォロワー顔文字使用頻度の高いアカウントのフォロワー顔文字利用者を中心にユーザー収集ツイートに顔文字が現れる確率が高そう
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 11/31ユーザーからツイート収集ユーザーからツイート収集Twitter APIの制約を守りつつ収集用のtaskを回すParallel gem で並列高速化( ^ω^ 三 ^ω^ )ヒュンヒュン
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 12/31
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 13/31
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 14/31暑さと並列実行にCPUがやられ暑さと並列実行にCPUがやられるる全CPUを並列実行で酷使すると電源につないでいてもMBPのバッテリーが減る( ᾥ )
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 15/31データが吹っ飛ぶデータが吹っ飛ぶCPUを酷使したせいかmacが吹っ飛ぶついでにSQLiteも吹っ飛ぶバックアップは大事\(^o^)/オワタ
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 16/31ツイートから顔文字を抽出ツイートから顔文字を抽出
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 17/31難航難航顔文字の定義が曖昧適切な抽出ルールづくりが難しい
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 18/31顔文字に関する論文顔文字に関する論文ググって見つけた論文を元にルール作成Unicodeプロパティによる判別完璧ではないのでノイズフィルタが必要
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 19/31抽出ロジックはgem化colobox/kaomoji
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 20/31UsageKaomoji.get_kaomoji_parts('(・3・)\(^o^)/ぷにう')=>["(・3・)\(^o^)/"]
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 21/31フィルタ成功例str = "聴きながら歌うから(*˘ᗜ˘*).。.:*"Kaomoji.get_kaomoji_parts(str)=>["(*˘ᗜ˘*).。.:*"]str = "失敗しました_(:3 」∠)_ ハルかわいい(」’ω’)」オォオォオ!!!ウウゥゥアアォオ!!Kaomoji.get_kaomoji_parts(str)=>["_(:3 」∠)_ ハル", "(」’ω’)」オォオォオ!!!ウウゥゥアアォオ!!!!!!"]
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 22/31フィルタ失敗例str = "ザ・下町!!という感じが伝わってきました(≧∀≦)"Kaomoji.get_kaomoji_parts(str)=>["ザ・下町!!", "(≧∀≦)"]str = "それは強いですが、また、悩ましいですね"Kaomoji.get_kaomoji_parts(str)=>["、また、"]str = "中高は行って良かったと思ってる(適当)"Kaomoji.get_kaomoji_parts(str)=>["(適当)"]
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 23/31ノイズデータのフィルタノイズデータのフィルタカッコが含まれていない改行コードが含まれる明らかにURLの一部文字列長が極端に短いなどの条件でフィルタ顔文字の確度を上げる
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 24/31集めたデータ数集めたデータ数
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 25/31ユーザー数ユーザー数19,00019,000
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 26/31ツイート数ツイート数40,000,00040,000,000
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 27/31抽出した顔文字抽出した顔文字11,000,00011,000,000
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 28/31フィルタにより選別された数フィルタにより選別された数630,000630,000
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 29/31顔文字数顔文字数重複、ノイズを除いておおよそ30,00030,000─=≡Σ((( ╹ω╹)
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 30/31今後今後フィルタリングの確度向上顔文字カタログでも作って公開(するかも)
6/8/2019 Slideslocalhost:10000/?print-pdf#/ 31/31まとめまとめ大量データ収集楽しい大量データ収集楽しいL('ω')┘三└('ω')」L('ω')┘三└('ω')」古いものには研究と論文があ古いものには研究と論文があり、読むと捗るり、読むと捗る気をつけよう 夏の暑さと 並列気をつけよう 夏の暑さと 並列処理処理