WordPress 3.3 Sonny リリース のお知らせでは、フォーラム回答者の紹介もありました。WordPress 日本語版作成チームのMLで、日本語フォーラムでも、回答の多い人を紹介できないか?ということで、スクリプトを作りました。
プログラムは、Active-Users-List-of-WordPress-Japan-Forum にあります。
- ja.forums.wordpress.org の rss を取得し、投稿者を抽出&記録する (rss.php)
- bbpress の RSS が30レスまでなので、レス数をカウント(check_more_29.php)。30以上の場合は手作業
- 質問者=記事の最初の投稿者を除外する (rm_qestioner.php)
- 抽出したデータを連結する (concat.sh)
- 文字列の登場回数を集計し、多い順に並べる (users.py)
という作業を行います。
RSS 抽出は、simplexml
が便利なので、PHP を使用しました。(一度に複数さばけるように、RSS 取得時にエラーが出ても例外を投げずに続行します。連番で取得しているので、該当番号の記事が削除されている場合にエラーが出ます。)
ユーザー名に空白を含む場合、$data .= str_replace(" ","__SPACE__",$dc->creator);
と__SPACE__
に書き換えしています(後で出てくる nltk で処理する都合)。
for ($num=7500;$num<8600;$num++){ $rssurl = 'http://ja.forums.wordpress.org/rss/topic/' . $num; $data = ""; if($rssdata = simplexml_load_file($rssurl)) { foreach ($rssdata->channel->item as $val) { $dc=$val->children('http://purl.org/dc/elements/1.1/'); $data .= str_replace(" ","__SPACE__",$dc->creator); $data .= " "; } } file_put_contents("rssdata/".$num.".txt",$data); }
文字列登場回数の集計は、NLTK ツールが便利なので、python を使用しました。word_tokenize
や FreqDist
は nltk が必要です。ubuntu の場合は、パッケージ(python-nltk)があり、GUI インストールも可能です。(nltk の詳細は入門 自然言語処理をごらんください。)
python users.py
で上位 20 個を抽出します。python users.py 50
のように、数字を指定すれば、抽出個数を変更できます。
import sys if len(sys.argv) >1: datalen = int(sys.argv[1]) else: datalen = 20 import nltk from nltk import * filein = open('data/data.py') rawdata = filein.read() filein.close() tokens = nltk.word_tokenize(rawdata) freqdata = FreqDist(tokens) resultdata = freqdata.keys() fileout = open('data/userlist.txt', 'w') fileout.write(', '.join(resultdata[0:datalen])) fileout.close()
フォーラムの記事番号7500から8599までを対象にカウントした結果、jim912, mypacecreator, IKEDA__SPACE__Yuriko, nobita, kz, kurosquare, redcocker, hissy, chestnut_jp, php-web, V.J.Catkick, Takayuki__SPACE__Miyoshi, orangethyme, gatespace, Kuraishi, ShinichiN, t.okubo, o6asan, c2nprds, sysbirdの順になりました。プロットした結果も掲載しておきます(プロット作成は、python plot.py
を実行してください。matplotlib が必要になります)。
なお、usernum.py で回答者数を集計できます。今回の範囲では、102名でした。多くの方がフォーラムに参加し、助け合っているのだなあ、と改めて実感しました。公式サイトだけでなく、WordCamp などでも紹介したほうがいいと思います。
プログラム作成に利用させていただいた PHP, Python, NLTK は、全てオープンソースとして公開されています。貢献者の皆様に感謝いたします。
プログラム開発実行環境は、Ubuntu を利用させていただきました。Ubuntu コミュニティで活動されている皆様、Ubuntu 財団、英国カノニカル社に感謝します。
[…] フォーラム貢献者の集計は、フォーラムの bbPress から取得した RSS フィードを元に、日本語版作成チームの水野史土 (php-web) さんが作業してくれました。集計を行ったプログラムのソースも公開されていますので、詳しく知りたい方は、水野さんのブログをご覧ください。 […]
[…] フォーラムで投稿数の多いユーザーを集計しました。WordPress フォーラムの投稿数をユーザー毎に集計する を、 ver 3.4 […]
[…] 集計スクリプトは、WordPress フォーラムの投稿数をユーザー毎に集計すると同じです。 […]