読者です 読者をやめる 読者になる 読者になる

悠々自適な雑記帳

@yuscarlet のブログです

構築記事から並びを取得するスクリプトのお話

アローラ!修論からの現実逃避がてら、構築記事から並びを取得するスクリプトを書いていたので実装のアイデアに関する記事でも書いてみようと思いました。くだらない記事なので適当に読み流してもらえると幸いです。

 

このスクリプトでは、構築記事のURLが与えられた際に、パーティのポケモン名とアイテム名を取得し、その一覧を出力します。構築記事中の個体紹介の書き方はそれぞれであり、ポケモン名@アイテム名という書き方(おそらくこれが一番オーソドックス)や、表にまとめる書き方、ポケモンの画像の後に詳細を書く書き方など、様々な方法で書かれているのが現状です。2017年1月30日時点の実装では、表にまとめる書き方とテキストベースでまとめる書き方に対応しています。

 

スクリプトの大まかな流れとしては、まず構築記事内から表を探して、表があれば表の同じ行に含まれるポケモン名とアイテム名を取得します。表が見つからない場合には、テキストベースの検索に遷移します。基本的にテキストベースで個体紹介がされている場合は、アイテム名の直前にポケモン名があると考えられるので、アイテム名→ポケモン名の順に検索します。また、個体紹介中のアイテム名の前には「@」や「・」や「:」が書かれていたり、前後を「【】」で囲ってある記事があったため、これらのパターンを検索するようにしています。それ以外にも、アイテム名とポケモン名の文字数が一定以内であれば、対応が取れている可能性が高いと判断して対として検出するようにしました。

 

先程、アイテム名を検索すると簡単に書きましたが、アイテム名の記述には表記ゆれがあり、これを考慮してアイテム名を検索する必要があります。表記ゆれとは、例えば「きあいのタスキ」というアイテムであれば、ゲーム上の表記以外にも「襷」、「気合の襷」、「気合のタスキ」、「きあいのたすき」など様々な表記が存在するということです。珍しいケースですが、「クチートナイト」が「ツインテール属性の石」と記述されている記事などもあり、人間の理解する能力はすごいなぁ(小並感)などと改めて思わされました。現状は手動で表記ゆれの対応リストを作っている状況なので、新しい表記ゆれが登場しても推測できるようになると良いなと思います。

 

現状のテキストベースの検索の問題点としては、構築記事の中にはポケモン名やアイテム名が複数書かれている場合があるため、正確にパーティの並びを取得できないことが挙げられます。また、メガ進化ポケモンをメガ進化後のポケモン名のみで記述している(例えば「メガルカリオ」とだけ書いてある)記事も少なくないため、このようなパターンには対応できていません。これに関しては、メガ進化ポケモンの名前が複数記述されている記事も多いため、どのように検出するのがよいか悩んでいる状況です。

 

ソースコード等は一応ここにあるので、興味があれば参考にしていただければと思います。

github.com

 

画像を利用した並びの検出についてですが、画像のポケモンが何であるかプログラムで判定する必要があり、この判定が簡単ではありません。画像認識を真面目に頑張る前に、どうにかして簡単に画像が何のポケモンか判定する方法がないかと考えていて、とりあえず思いついたのがGoogle先生にこの画像が何のポケモンかを聞いてみることでした。この方法だと、使用率の高いポケモンだと判定がうまくいくのですが、マイナーなポケモンや新しいポケモンの判定がうまくいかない場合があります。例えば、新ポケモンの「テッカグヤ」の画像を何のポケモンか聞いてみると「レックウザ」だと言われてしまったりします(´・ω・`)

 

今後気が向いたら、アイテム名を記述しないメガ進化ポケモンの記述への対応や画像認識の手法について勉強して、画像を利用した並びの検出にも取り組んでいきたい次第です。この記事を読んでスクリプトを改善するアイデアが思いついた方がいれば、是非意見を聞かせていただけると嬉しく思います。

 

最後に、このスクリプトを書いていて、構築記事を書く上でのテンプレートのようなもの(個体紹介の仕方やアイテム名の表記ゆれをなくすための決まり)がある方が、人間にとってもプログラムにとっても内容を解釈しやすくて良いのじゃないかなと思いました。この記事を読んでくださった方が少しでも意識して構築記事を書くようになってくれたら嬉しいなと思っています。何か質問などがあれば、コメントやTwitterなどで気軽にどうぞ。