つらねの日記

プログラムの進捗やゲームをプレイした感想などを書き連ねる日記。

単語距離を調べるクソプログラムを書いた

前置き

突然ですが,皆さん,Wikipediaである単語からある単語へ出来るだけ短かく到達するゲームとかやったことありますよね.

私はありません

ともかく,如何なる単語に対してもハブのようなものが存在し,7だか14だか以内にはどの単語にも到達することが出来ると聞く.それを本当なのかどうか立証してみようという試みである.

結果論

距離1~2じゃないと運用できないくらいには,思ったより通信で速度が出なかったので,サーバーへの負荷は承知でスレッド化するかなんかしないとだめそう.

ソースコード

github.com

Python3で書いた.HTTPリクエストをするときにrequestsを使うと楽そうだったので,それを使わせて頂いた. 幅優先でざざっと流してあげる感じ.

Wikipedia API

Wikipedia APIなるものがあるらしい.強い. 記事からaタグを取ってきて,やるのかなとか思ってたからめっちゃ良さがある.

使い方はQiitaに上がっていた記事がめっちゃわかりやすかった. qiita.com

proplinksを指定するだけで大体上手くいきそう.pllimitは最大の500にして(1000でリクエストを送ったらmaxは500ですって返事がきた),plnamespaceには0を設定した.あとxmlよりjsonの方が個人的には処理しやすいので,formatjson

艦これとかで検索すると,ただのリダイレクトだったりして,困ったけど,queryにredirectsを含めると,自動でリダイレクト先のを出してくれるっぽい. API:Query/ja - MediaWiki

こんな感じになった. https://ja.wikipedia.org/w/api.php?format=json&action=query&prop=links&pllimit=500&plnamespace=0&redirects=&titles=%e8%89%a6%e3%81%93%e3%82%8c

試してみた

$ py pediwalk.py "Twitter" "Google"
search start Twitter -> Google
Twitter
---------result---------
Twitter
Google
$ py pediwalk.py "Twitter" "Yahoo"
search start Twitter -> Yahoo!
Twitter
2010 FIFAワールドカップ
2011 FIFA女子ワールドカップ
2011年
2013年
2ちゃんねらー
7月
7月13日
AERA
Adobe AIR
All About
Android
BIGLOBE
BlackBerry
---------result---------
Twitter
BlackBerry
Yahoo!

案外遅いぞ. 数字は大体日付っぽいし,後回しにしてもいいかもなぁ.

まとめ

単語距離が確認ができない程度には,だめだった. なんかもっと有用性があるクソプログラムを作りたい.