ザ☆シュビドゥヴァーズの日記

毎日更新されたりされなかったりする日記

次期表記揺れ検知botの基本設計

imockです。

そこを何とかしたいので考えてみよう

Step0.まずは現状分析

スーパーエンジニアさら氏の手により作成された表記揺れ検知botが現在稼働しています。しかし、「シュビさん」「ドゥヴァーズ」「シュビドバーズ」などの固定文言で検索を行なっているのが現状であり、日々増殖する悪質な表記揺れを全て検出できているわけではありません。これは、Twitterの仕様によりワイルドカード正規表現による日本語の曖昧検索が行えないことが原因です。サーバーに保存したツイートのデータに対してであれば曖昧検索は可能なのですが、全世界の全ツイートを取得すると情報量が多すぎてサーバーが即死します。このため、検索範囲を限定してツイートを取得し、それに対して曖昧検索を行う方法を考えます。

Step1.表記揺れ捜査対象の策定

超有名人であるどこぞの防衛大臣と異なり、表記揺れを発生させるのはほぼ身内です。せいぜいシュビ公式アカウントのフォロワーとその周辺人物に限られます。このため、シュビドゥヴァーズのフォロワーと「フォロワーのフォロワー」のリストを作成し、from+OR+since+untilで結合した条件を投げることで、表記揺れ予備軍の一定期間のツイートを全て取得することが可能であると考えます。
ただ、フォロワーのリストを作成するのは比較的楽なのですが、「フォロワーのフォロワー」のリストを作成するのはかなり難しいです。フォロワーのリスト1名ずつに対しフォロワーを取得していけば理論上は作成できるのですが、Twitter APIの仕様により問い合わせできる回数には制限が設けられています。シュビ公式アカウントのフォロワーは2500弱ですが、2500回問い合わせを行えば即BANされるでしょう。このため、もう少し範囲を狭める必要がありそうです。

Step2.とりあえずフォロワーのツイートを取得してから考える

試しに下記条件で検索を実施してみます。
* from:the_sdvs OR from:imonokandume since:2019-10-09

実際にはOR条件で上限までアカウントを列挙し、時間の範囲を狭めることになりますが概ねこのようなイメージです。
ここで注目すべきは@ツイートです。ツイートのデータはJSONオブジェクトとして返却されますが、その中にはリプライ先ユーザーID(screen_name)が格納されています。ほとんどの場合リプライはフォロワーにしか送付しないですし、表記揺れするような輩は他人とそこそこリプライをやり取りする程度にはTwitterしてそうです。よって、取得したフォロワーのツイートからリプライ送付先を抜き出しリスト化することで、表記揺れ実行犯予備軍リストを作成できるのではないでしょうか。この方法であれば問い合わせ回数も少なくて済みそうです。

Step3.ざっくりまとめ

  1. シュビドゥヴァーズ公式アカウントのフォロワーの一覧を作成する
  2. 1のユーザーIDをOR条件で結合し、時間範囲指定しツイートデータを取得
  3. 2で抽出したツイートデータからリプライ送付先を抽出し、重複を取り除きかつフォロワーではないユーザーIDリストを作成する。
  4. 3のユーザーIDに対し2と同じ方法でツイートデータを取得
  5. 2と4のツイートデータの本文に対し、正規表現検索など様々な手法で表記揺れを検索する。(正規表現の一例: .*(ドゥ|ド|デュ|ジュ|ズ|ヅ)(ヴァ|バ|パ)[ーぁァ][すスずズ]$)

Step4.その他

他にも、表記揺れ事例をAIに学習させ、固定文言検索語句の候補を増やす手法があります。ただ、試験的に表記揺れ教師データを書き出すExcelマクロを作成したところ一晩経っても処理が終わらず、データ容量も軽く5GBを超えていたので挫折しました。技術力が足りない。

結論

  • 色々妄想するのは楽しいけどコーディングスキルが足りない。
  • やっぱりこの防衛大臣強すぎる。
  • 気が向いたら作ってみてください > さらさん