#kichi-memo

せいきち (@seikichi) のメモ帳

トピックモデルを用いてWeb小説のジャンル・流行を分析しよう

はじめに

この記事は京大マイコンクラブ(KMC)2012年度春合宿発表したものを文章にまとめたものです.余談ですが,KMCはただいま絶賛新入部員募集中ですので,コンピュータ/プログラミング/DTM/イラスト制作に興味がある人は是非説明会でお越しください (宣伝).

概要

皆さんは「小説家になろう」という小説投稿サイトをご存知でしょうか?そこそこライトノベルを読まれる方なら,一度ぐらい名前を聞いたことがあるのではないかと思います.と言うのも2010年頃から,「小説家になろう」発祥の小説が様々なライトノベルレーベルから発売されるようになったからです.有名どころですと「ログ・ホライズン」や「魔法科高校の劣等生」が挙げられるでしょうか.

こうなるとラノベ読みとしては注目せざるを得ません.というわけでランキングの上位作を見てみるのですが,びっくりするぐらい「異世界転生」や「ゲームの世界に転生」が多い.例えば累計ランキング1位の「異世界迷宮で奴隷ハーレムを」のあらすじを見てみますと,

ゲームだと思っていたら異世界に飛び込んでしまった男の物語。迷宮のあるゲーム的な世界でチートな設定を使ってがんばります。そこは、身分差があり、奴隷もいる社会。となれば、やることは一つ。俺様、最強、ハーレム、性奴隷の要素があり、人も死にます。

http://ncode.syosetu.com/n4259s/

続いて累計2位の「無職転生 - 異世界行ったら本気だす -」のあらすじは,

34歳職歴無し住所不定無職童貞のニートは、ある日家を追い出され、人生を後悔している間にトラックに轢かれて死んでしまう。目覚めた時、彼は赤ん坊になっていた。どうやら異世界に転生したらしい。  彼は誓う、今度こそ本気だして後悔しない人生を送ると。  ※勢いで書いているので設定等に甘い点があり、かつ不定期更新です。

http://ncode.syosetu.com/n9669bk/

3位以下もこんな感じで,ランキング上位作品にかなり偏りがあることが見てとれます.

実際,ユーザの間でもこの傾向は認知されているらしく,適当にググるといくつか記事が見つかります.例えばニコニコ大百科には次のように解説されています.

投稿される作品に一定の偏りが見られる。異世界転移やVRMMOといった、ゲーム的なライトノベルが非常に多く、独自の文化を形成している。

http://dic.nicovideo.jp/a/%E5%B0%8F%E8%AA%AC%E5%AE%B6%E3%81%AB%E3%81%AA%E3%82%8D%E3%81%86

しかしどうも詳細(?)な分析が行われたことは無いようだったので,全小説をスクレイピングし,トピックモデルを利用することで人気ジャンルやジャンルの流行り廃りを分析してみました.

トピックモデルとは何ぞや

トピックモデルとは 様々な(離散)データに隠れた潜在的なトピックを推定するモデルです.トピックというのは話題や分野といった大ざっぱな意味のようなものです (参考).この記事では Latetnt Dirichlet Allocation (LDA) と Dynamic Topic Model (DTM) という2つのトピックモデルを利用します.なおどちらも真面目に解説すると記事が1つ書けてしまう内容なので,深入りはしません.

LDAは文章の生成モデルです,といきなり書いても伝わるわけがないので LDAを利用するとどういうことが出来るのかを見てみます.LDAの推論を行うと,大量の文章から「この文章群の中にはどんな話題があるか」を見つけだすことができます.以下の画像はBleiらが2003年にAP通信コーパス (よーするに大量の英語のニュース記事です) にLDAの推論を行なった結果です.
f:id:se-kichi:20130429000025p:plain
この結果を見ると,

  • AP通信のニュース記事の中には "Arts", "Budgets", "Children" や "Education" などのトピック (話題) が含まれている
  • "Arts" の話題(トピック)に属する文章には "NEW", "FILM", "SHOW" といった単語が出やすい

などといったことが分かります.注意点としてこの例では:

  1. 実際には50個のトピックを抽出しています (結果が分かりやすい4つのトピックを見せているだけ).なおトピック数は事前に人手で決定する必要があります.
  2. 各トピックに"Arts"や"Education"といった名前が付いていますが,実際にはトピック名までは推定できません (結果を分かりやすくするために人手で付けられている)

続いて Dynamic Topic Models (DTM) です.DTMはLDAの拡張となっていて,時系列データを取り扱うことができます.DTMを用いると「トピックの流行り廃り」や「トピック内の単語の使われかたが時間に応じてどう変化したか」などが分かります.実際にDTMを利用した結果を見てみます.以下は 1880年から2002年までに刊行されたサイエンス誌に掲載された文章群にDTMを適用した結果から,1つのトピックを取り出したものです.
f:id:se-kichi:20130429001826p:plain
結果を見ると,このトピックに属する文章には 1880年頃には"atomic"や"molecular"といった単語がよく出現してましたが,2000年頃には "quantum" の方がよく出現するようになったということが分かります.

与えられた文章群からLDAやDTMの推論を行う (トピックを見つける) のはちょっと解説が面倒なので省略します.というかこの記事では全部ライブラリに丸投げします.

実験1: LDAでジャンル分析

具体的な手順は以下:

  1. 「小説家になろう」に掲載されている全小説のあらすじを取得します.具体的には各小説情報のページ () をひたすらスクレイピングします.2013/03/19 17:00 の時点で200241件の小説が掲載されていました *1
  2. 各あらすじをMeCabで単語分割します
  3. TF-IDF っぽい手法で単語の種類数 (語彙) を削減します.各単語wについて score(w) = log(文章集合全体でのwの出現回数) / log(文章集合の数 / wが登場する文章集合の数) というスコアを計算し,上位2万件の単語のみを利用します.(元の語彙数は121828でした)
  4. LDAライブラリを利用してトピック推定します.トピック数は50に設定しました.

実験1の結果

実験結果 から一部のトピックを抜粋してみました.

topic #4: 0.0404*更新 + 0.0253*お願い + 0.0233*ご + 0.0175*ください + 0.0161*よろしく + 0.0153*投稿 + 0.0152*不定期 + 0.0142*感想 + 0.0135*作者 + 0.0135*思い + 0.0125*初 + 0.0122*作品 + 0.0121*ませ + 0.0112*など + 0.0102*や + 0.00981*編集 + 0.00893*ござい + 0.00869*せ + 0.00839*作 + 0.00839*予定 + 0.00815*書い + 0.0077*なり + 0.00751*おり + 0.00733*下さい + 0.00705*たい + 0.00697*短 + 0.00693*目 + 0.00672*文章 + 0.00649*処女 + 0.00626*たら + 0.00611*連載 + 0.00588*完結 + 0.00583*いき + 0.00568*いただき + 0.00562*初めて + 0.00561*いたし + 0.00528*誤字 + 0.00519*了承 + 0.00502*現在 + 0.00495*まで + 0.00493*評価 + 0.00489*m + 0.00468*方 + 0.00462*申し訳 + 0.00428*脱字 + 0.00423*報告 + 0.00419*等 + 0.00415*書き + 0.00406*どうぞ + 0.00402*点 + 0.0039*執筆 + 0.00381*ところ + 0.00367*皆様 + 0.00364*見守っ + 0.00363*ありがとう + 0.00351*頂き + 0.00347*指摘 + 0.00334*意見 + 0.00324*お待ち + 0.00321*活動 + 0.0032*見 + 0.00312*ご覧 + 0.00307*致し + 0.00299*幸い + 0.00295*停止 + 0.00294*どうか + 0.00294*また + 0.00293*嬉しい + 0.00292*あれ + 0.00281*亀 + 0.00278*いただける + 0.00272*として + 0.00264*書く + 0.00263*未定 + 0.00262*御 + 0.00257*思っ + 0.00255*頑張り + 0.00251*拙い + 0.00251*期待 + 0.00235*宜しく + 0.00229*修正 + 0.00225*アドバイス + 0.00225*初心者 + 0.00223*容赦 + 0.00221*設定 + 0.00218*今 + 0.00217*やっ + 0.00217*かなり + 0.00214*多々 + 0.00213*色々 + 0.0021*登録 + 0.0021*お気に入り + 0.00205*読者 + 0.002*注意 + 0.00198*基本 + 0.00194*により + 0.00192*遅い + 0.00191*すみません + 0.00188*再開 + 0.00187*為
topic #21: 0.0472*学園 + 0.0466*高校 + 0.0399*部 + 0.0378*学校 + 0.031*生徒 + 0.0192*会 + 0.0173*入学 + 0.015*通う + 0.0149*年生 + 0.0134*女子 + 0.0117*教師 + 0.00959*クラス + 0.00884*部活 + 0.00775*室 + 0.00766*会長 + 0.00744*男子 + 0.00651*そこ + 0.00649*青春 + 0.00634*不良 + 0.00605*私立 + 0.00602*委員 + 0.00584*先生 + 0.00527*活動 + 0.00474*中学 + 0.00464*長 + 0.00463*中学校 + 0.00453*高等 + 0.00436*所属 + 0.00432*介 + 0.00431*部員 + 0.00431*三 + 0.00421*部長 + 0.00412*校 + 0.00387*メンバー + 0.00375*祭 + 0.00358*奏 + 0.00346*として + 0.00345*あっ + 0.00342*生活 + 0.0033*転校 + 0.00328*入部 + 0.00321*研究 + 0.00318*とある + 0.00313*バンド + 0.00311*入っ + 0.00309*大学 + 0.00309*同じ + 0.00306*音楽 + 0.003*しかし + 0.00291*サッカー + 0.0029*図書 + 0.00279*先輩 + 0.00278*有名 + 0.00272*通っ + 0.00257*や + 0.00257*文化 + 0.00251*副 + 0.00244*放課後 + 0.00239*授業 + 0.00237*担任 + 0.00233*学生 + 0.00225*勉強 + 0.00222*美術 + 0.00221*組 + 0.00219*涼 + 0.00218*教室 + 0.00217*校舎 + 0.0021*寮 + 0.00208*舞台 + 0.00204*春 + 0.00202*高校生 + 0.00201*学年 + 0.00201*高 + 0.002*制 + 0.00198*式 + 0.00196*文芸 + 0.00195*グループ + 0.00194*男子校 + 0.00191*転入 + 0.00191*入る + 0.0019*サークル + 0.00185*せ + 0.00184*なり + 0.00184*新 + 0.00183*ヶ + 0.00183*進学 + 0.00182*名 + 0.00182*剣道 + 0.0018*ここ + 0.00177*噂 + 0.00175*ストーリー + 0.00175*られる + 0.00171*科 + 0.00166*聖 + 0.00165*バスケ + 0.00164*演劇 + 0.00163*ばかり + 0.00161*体育 + 0.0016*事 + 0.00159*始まる
topic #24: 0.0784*日常 + 0.0727*生活 + 0.0579*普通 + 0.0402*日々 + 0.0369*高校生 + 0.0288*毎日 + 0.0272*平凡 + 0.0231*変わっ + 0.0177*過ごし + 0.0177*少し + 0.0158*送っ + 0.0145*非 + 0.0134*送る + 0.0111*ごく + 0.00936*過ごす + 0.00827*平和 + 0.00793*変化 + 0.00757*的 + 0.00739*でも + 0.00713*ずつ + 0.00707*平穏 + 0.00703*どこ + 0.00681*しかし + 0.00673*人生 + 0.00655*男子 + 0.00638*高校 + 0.00591*突然 + 0.00564*退屈 + 0.00553*ちょっと + 0.00547*学生 + 0.00544*事 + 0.00514*変わら + 0.00508*はず + 0.00498*楽しい + 0.00493*中学生 + 0.00472*出会い + 0.00468*ながら + 0.00461*暮らし + 0.00452*出来事 + 0.00444*学校 + 0.00441*ただ + 0.00435*始まる + 0.00435*楽しく + 0.00435*巻き込ま + 0.00404*これ + 0.00402*なく + 0.00382*まで + 0.00381*描い + 0.00376*によって + 0.00369*不思議 + 0.0036*一変 + 0.00353*しまう + 0.00346*きっかけ + 0.0034*しまっ + 0.00333*境 + 0.00317*ありふれ + 0.00297*周り + 0.00287*崩れ + 0.00279*何気ない + 0.00277*友人 + 0.00273*大学生 + 0.0027*今 + 0.00266*変わり + 0.00259*違う + 0.00259*出会っ + 0.00244*奇妙 + 0.0024*淡々 + 0.00239*当たり前 + 0.00225*ごくごく + 0.00224*穏やか + 0.00223*出会う + 0.00222*無い + 0.0022*や + 0.00214*始め + 0.00211*変哲 + 0.00209*だが + 0.00209*始まっ + 0.00205*変わる + 0.00205*ほんの + 0.00204*つまらない + 0.00201*一般 + 0.002*青春 + 0.002*始める + 0.00194*今日 + 0.00193*変 + 0.0019*ライフ + 0.00185*大きく + 0.00183*共同 + 0.00182*同居 + 0.00177*振り回さ + 0.00176*サラリーマン + 0.00173*特に + 0.0017*起き + 0.00166*いたっ + 0.00164*おかしな + 0.00161*刺激 + 0.0016*新しい + 0.00157*始まり + 0.00156*暮らす + 0.00154*充実
topic #31: 0.0807*ゲーム + 0.0111*プレイヤー + 0.0108*現実 + 0.0106*ネット + 0.00866*参加 + 0.00858*型 + 0.00789*プレイ + 0.00783*仮想 + 0.0078*オンライン + 0.0065*迷宮 + 0.00643*モンスター + 0.00625*VRMMO + 0.00606*脱出 + 0.006*機 + 0.00597*リアル + 0.00505*クリア + 0.005*まで + 0.00481*デスゲーム + 0.00475*できる + 0.00472*レベル + 0.00466*として + 0.0046*事 + 0.00453*システム + 0.00444*イベント + 0.00436*攻略 + 0.00429*しかし + 0.00423*内 + 0.00391*ルール + 0.00388*ダンジョン + 0.00374*パソコン + 0.00369*ログアウト + 0.00367*スキル + 0.00365*冒険 + 0.00353*なく + 0.00352*タイム + 0.00341*しまっ + 0.00333*カード + 0.00331*VRMMORPG + 0.00325*手 + 0.00319*一つ + 0.00317*これ + 0.00313*的 + 0.00308*VR + 0.003*空間 + 0.003*開始 + 0.00294*今 + 0.0029*サービス + 0.00285*条件 + 0.00284*しまう + 0.00283*Online + 0.00281*テスト + 0.00279*閉じ込め + 0.00279*あっ + 0.00274*RPG + 0.0027*せ + 0.00266*サバイバル + 0.00266*始め + 0.00259*VRMMO + 0.00259*られる + 0.00252*開発 + 0.00249*技術 + 0.00244*人気 + 0.00243*そこ + 0.00242*でき + 0.00242*不可能 + 0.00242*不能 + 0.0024*ギルド + 0.00239*発売 + 0.00237*ボス + 0.00232*度 + 0.0023*名 + 0.00229*出来る + 0.00224*最強 + 0.00219*仲間 + 0.00214*マスター + 0.00211*万 + 0.0021*キャラクター + 0.00209*通称 + 0.00208*数 + 0.00208*ログイン + 0.00207*MMORPG + 0.002*入れ + 0.00198*やっ + 0.00197*始まる + 0.00195*だけ + 0.00195*電脳 + 0.00194*マシン + 0.00193*初 + 0.00188*ず + 0.00187*β + 0.00186*死 + 0.00185*生き残る + 0.00184*友人 + 0.00183*と共に + 0.00182*達 + 0.00182*呼ば + 0.0018*探索 + 0.00178*行わ + 0.00177*画面 + 0.00176*クエスト
topic #33: 0.0831*異 + 0.0353*死ん + 0.029*転生 + 0.0257*しまっ + 0.0242*神様 + 0.0146*事故 + 0.0141*元 + 0.0126*たら + 0.0121*しまう + 0.0114*飛ばさ + 0.0109*目 + 0.0102*生き + 0.00979*チート + 0.00945*として + 0.0075*前世 + 0.00718*人生 + 0.00701*神 + 0.00699*戻る + 0.0069*◇ + 0.00686*そこ + 0.00678*突然 + 0.0065*地獄 + 0.00646*事 + 0.00644*しかも + 0.00568*しかし + 0.0055*はず + 0.00531*車 + 0.00493*せ + 0.00486*まま + 0.00479*能力 + 0.00465*付い + 0.00459*最強 + 0.0044*交通 + 0.00438*前 + 0.00437*気 + 0.00431*なく + 0.00412*らしい + 0.00403*しまい + 0.00401*魂 + 0.00399*先 + 0.00381*天国 + 0.00372*巻き込ま + 0.00369*記憶 + 0.00342*助け + 0.00334*体 + 0.00327*気がつい + 0.00325*フラグ + 0.00323*帰る + 0.00323*殺さ + 0.00314*力 + 0.00308*ず + 0.00307*方法 + 0.00305*後 + 0.00305*行く + 0.00304*命 + 0.00291*目覚め + 0.0029*によって + 0.00289*ながら + 0.00288*死亡 + 0.00287*トラック + 0.00282*手 + 0.00267*度目 + 0.00261*見知らぬ + 0.00261*生きる + 0.00261*死に + 0.00259*次に + 0.00259*意識 + 0.00258*死 + 0.00258*来 + 0.00248*思っ + 0.00247*ミス + 0.00245*幽霊 + 0.00242*持っ + 0.00242*生まれ変わっ + 0.00241*落とし + 0.00241*死後 + 0.00241*あっ + 0.00236*死ぬ + 0.00235*転移 + 0.00234*落ち + 0.00234*いきなり + 0.00226*何故か + 0.00225*覚め + 0.00222*により + 0.00221*身体 + 0.0022*なぜ + 0.00219*別 + 0.00218*行っ + 0.00217*まで + 0.00211*できる + 0.00206*現世 + 0.00205*与え + 0.00204*不運 + 0.00201*言わ + 0.00201*為 + 0.00199*これ + 0.00199*貰っ + 0.00197*憑依 + 0.00195*無事 + 0.00194*なんと
topic #46: 0.0647*事件 + 0.0307*謎 + 0.0186*殺人 + 0.0179*起こる + 0.0134*探偵 + 0.0129*起こっ + 0.0128*不明 + 0.0126*自殺 + 0.0125*解決 + 0.0121*巻き込ま + 0.00982*起き + 0.0097*正体 + 0.00845*犯人 + 0.00716*次々 + 0.00651*真実 + 0.00634*前 + 0.00608*連続 + 0.00604*警察 + 0.00592*行方 + 0.00572*現象 + 0.00566*出来事 + 0.00545*刑事 + 0.00544*推理 + 0.00541*真相 + 0.00519*隠さ + 0.00516*調査 + 0.00507*発見 + 0.005*ミステリー + 0.00467*失踪 + 0.00465*起きる + 0.0046*捜査 + 0.0044*しまう + 0.00426*誘拐 + 0.0042*死体 + 0.00417*現場 + 0.00402*異変 + 0.00385*奇妙 + 0.00381*しかし + 0.00374*噂 + 0.00364*あっ + 0.00362*とある + 0.00356*原因 + 0.00338*殺さ + 0.00332*遭遇 + 0.00332*不可解 + 0.00329*事 + 0.00326*起こり + 0.00324*明らか + 0.00321*目撃 + 0.00321*発生 + 0.00316*巻き + 0.00315*名 + 0.00312*追う + 0.00295*依頼 + 0.00289*事務所 + 0.00285*透 + 0.00285*誰 + 0.00282*死 + 0.00282*被害 + 0.00281*助手 + 0.00278*犯 + 0.00277*人物 + 0.00274*きっかけ + 0.00272*知る + 0.00272*果たして + 0.00266*殺害 + 0.00263*秘密 + 0.0026*一体 + 0.0026*怪盗 + 0.00257*町 + 0.00251*失 + 0.00242*犯罪 + 0.00237*始める + 0.00235*くし + 0.00233*明かさ + 0.00225*関係 + 0.00225*過去 + 0.00224*事実 + 0.00221*友人 + 0.00209*響 + 0.00208*課 + 0.00206*突然 + 0.002*様々 + 0.00198*サスペンス + 0.00193*と共に + 0.00192*市 + 0.00192*身 + 0.0019*強盗 + 0.00189*怪奇 + 0.00189*心霊 + 0.00188*大 + 0.00188*挑む + 0.00187*奇怪 + 0.00186*しよ + 0.00185*組織 + 0.00177*数々 + 0.00177*何者 + 0.00176*目的 + 0.00176*突如 + 0.00173*そこ

それぞれトピック21が学園モノ,トピック24が日常,トピック31がゲーム,トピック46が殺人事件 というジャンルを表しているのが分かります.なお細かい数値は,トピック31の場合ですと「トピック31からはゲームという単語が0.807,プレイヤーという単語が0.0111,…… で出現する」という意味を表しています.あとトピック4がメタ(?)な感じで面白いですねー.

実験2: DTMでジャンルの流行分析

LDAを使うことでどのようなジャンルが存在しているかが分かりました,けどこれだけじゃ物足りない…….というわけでDTMを使って「各ジャンルの流行り廃り」を見てみることにします.果たして「異世界転生」や「ネトゲ」ものは時間に応じてどう移り変わってきたのでしょうか.

手順は実験1とほぼ同じです.最後にLDAのライブラリを利用するのではなく,DTMのライブラリを利用するとことが唯一の違いでしょうか.DTMでは文章を時間ごとにいくつかの集合に分割する必要があるので,200241件の小説を古いものから新しいものに並べたあと,等しく10分割しました.トピック数は50.それ以外のパラメータはDTMライブラリに含まれている sample.sh に書かれている例と同じにしました.

実験2の結果

実験結果ですが,各トピックごとにファイルが分かれています.例えばトピック0の結果は以下のようになっています.

time-id #0: 0.0801 ゲーム, 0.0321 現実, 0.0284 お願い, 0.019 よろしく, 0.00968 や, 0.00784 リアル, 0.00759 評価, 0.00756 仮想, 0.00704 テスト, 0.00683 参加, 0.00669 感想, 0.00654 オンライン, 0.0061 プレイ, 0.00603 プレイヤー, 0.00566 モンスター, 0.00554 冒険, 0.00538 閉じ込め, 0.00517 脱出, 0.00433 クリア, 0.00423 ネット, 0.00392 できる, 0.00382 達, 0.0036 迷宮, 0.00354 空間, 0.00331 内, 0.0032 初, 0.00318 システム, 0.00309 サバイバル, 0.00295 カード, 0.00294 ギルド, 0.00287 まで, 0.00261 しかし, 0.00252 攻略, 0.0024 イベント, 0.00236 しまう, 0.00235 VRMMO, 0.00229 ダンジョン, 0.00224 として, 0.0022 RPG, 0.00213 始め, 0.00207 なり, 0.00206 型, 0.00204 られる, 0.00203 しまっ, 0.00199 デスゲーム, 0.00196 仲間, 0.00193 VRMMORPG, 0.00192 たち, 0.00192 サービス, 0.00188 条件, 0.00186 レベル, 0.00184 なく, 0.00181 開始, 0.00181 ログアウト, 0.00178 発売, 0.00177 人気, 0.00174 万, 0.00174 大, 0.00173 キャラクター, 0.00172 これ, 0.00171 ディーン, 0.00169 とある, 0.00168 的, 0.00167 スキル, 0.00167 RPG, 0.00167 逃避, 0.00167 名, 0.00167 罰, 0.00166 不能, 0.00165 マスター, 0.00161 数, 0.00157 最強, 0.00153 不可能, 0.00153 Online, 0.00151 生き残る, 0.00147 MMORPG, 0.00147 VR, 0.00145 始まる, 0.00145 行わ, 0.00145 ボス, 0.00142 一つ, 0.00142 せ, 0.00141 ログイン, 0.0014 バグ, 0.00139 VRMMO, 0.00138 出来る, 0.00137 あっ, 0.00134 バーチャル, 0.00134 ルール, 0.00133 通称, 0.00132 クエスト, 0.00131 手, 0.00128 友人, 0.00127 キャラ, 0.00126 目指す, 0.00125 度, 0.00124 楽しむ, 0.00121 事, 0.0012 ソフト, 0.0012 探索
time-id #1: 0.0793 ゲーム, 0.0313 現実, 0.0265 お願い, 0.0182 よろしく, 0.00995 や, 0.00764 リアル, 0.00761 仮想, 0.00761 評価, 0.00709 テスト, 0.0069 感想, 0.00677 参加, 0.00668 オンライン, 0.00636 プレイヤー, 0.00616 プレイ, 0.00569 モンスター, 0.00556 冒険, 0.00517 閉じ込め, 0.00507 脱出, 0.00436 クリア, 0.00424 ネット, 0.00389 できる, 0.00383 達, 0.00375 迷宮, 0.00348 空間, 0.00338 内, 0.00319 システム, 0.00315 初, 0.00304 サバイバル, 0.00304 ギルド, 0.0029 カード, 0.00289 まで, 0.00266 しかし, 0.00259 攻略, 0.00248 VRMMO, 0.00242 イベント, 0.00238 しまう, 0.00237 ダンジョン, 0.00228 として, 0.00223 RPG, 0.00214 始め, 0.00211 なり, 0.0021 型, 0.00206 しまっ, 0.00206 デスゲーム, 0.00205 られる, 0.00201 VRMMORPG, 0.002 仲間, 0.00196 たち, 0.00195 サービス, 0.0019 レベル, 0.0019 条件, 0.00188 ログアウト, 0.00186 なく, 0.00184 開始, 0.00181 発売, 0.00179 万, 0.00179 人気, 0.00178 キャラクター, 0.00175 大, 0.00174 これ, 0.00172 スキル, 0.00172 とある, 0.0017 的, 0.00169 名, 0.00168 RPG, 0.00167 不能, 0.00166 逃避, 0.00165 マスター, 0.00164 罰, 0.00162 数, 0.0016 最強, 0.00157 Online, 0.00154 ディーン, 0.00153 不可能, 0.00152 VR, 0.00151 MMORPG, 0.00151 生き残る, 0.00147 ボス, 0.00147 始まる, 0.00144 一つ, 0.00144 せ, 0.00144 ログイン, 0.00144 VRMMO, 0.00144 行わ, 0.00143 バグ, 0.00139 出来る, 0.00139 あっ, 0.00136 通称, 0.00135 クエスト, 0.00133 ルール, 0.00133 手, 0.00132 バーチャル, 0.00129 友人, 0.00128 目指す, 0.00127 キャラ, 0.00126 度, 0.00123 β, 0.00122 楽しむ, 0.00122 探索, 0.00121 事
time-id #2: 0.0776 ゲーム, 0.0298 現実, 0.0225 お願い, 0.0161 よろしく, 0.0101 や, 0.00759 仮想, 0.00731 評価, 0.00728 リアル, 0.00712 プレイヤー, 0.00709 テスト, 0.00688 オンライン, 0.00681 感想, 0.00654 参加, 0.00625 プレイ, 0.00564 モンスター, 0.0055 冒険, 0.00486 脱出, 0.00484 閉じ込め, 0.00436 クリア, 0.00425 ネット, 0.00401 迷宮, 0.00387 達, 0.00382 できる, 0.00348 内, 0.00336 空間, 0.0032 システム, 0.00319 ギルド, 0.00305 初, 0.00292 サバイバル, 0.00291 まで, 0.00284 カード, 0.00277 攻略, 0.00276 VRMMO, 0.00274 しかし, 0.00252 ダンジョン, 0.00246 イベント, 0.00243 しまう, 0.00237 として, 0.0023 RPG, 0.00222 デスゲーム, 0.00218 型, 0.00216 VRMMORPG, 0.00215 始め, 0.00215 なり, 0.00212 しまっ, 0.00207 仲間, 0.00205 られる, 0.00203 たち, 0.00203 ログアウト, 0.00202 サービス, 0.00198 レベル, 0.00192 条件, 0.00191 開始, 0.00188 なく, 0.00186 発売, 0.00185 万, 0.00184 キャラクター, 0.00183 スキル, 0.00182 人気, 0.00179 これ, 0.00177 とある, 0.00176 大, 0.00173 的, 0.00171 名, 0.00168 不能, 0.00167 RPG, 0.00167 Online, 0.00167 数, 0.00165 最強, 0.00164 マスター, 0.00163 VR, 0.00163 逃避, 0.0016 MMORPG, 0.00156 罰, 0.00154 VRMMO, 0.00152 不可能, 0.00151 ログイン, 0.00151 ボス, 0.0015 生き残る, 0.00149 始まる, 0.00149 せ, 0.00148 一つ, 0.00145 バグ, 0.00142 あっ, 0.00141 クエスト, 0.00141 行わ, 0.0014 出来る, 0.0014 通称, 0.00134 手, 0.00133 ディーン, 0.00132 ルール, 0.0013 バーチャル, 0.0013 キャラ, 0.0013 友人, 0.0013 目指す, 0.00128 β, 0.00127 度, 0.00125 探索, 0.00123 事, 0.0012 開発
time-id #3: 0.0761 ゲーム, 0.0277 現実, 0.0164 お願い, 0.0124 よろしく, 0.00919 や, 0.00827 プレイヤー, 0.00754 仮想, 0.00714 オンライン, 0.00708 テスト, 0.00682 リアル, 0.00645 プレイ, 0.00637 参加, 0.00615 評価, 0.00555 感想, 0.00554 モンスター, 0.00534 冒険, 0.00474 脱出, 0.0045 閉じ込め, 0.00432 迷宮, 0.00431 クリア, 0.00424 ネット, 0.00398 達, 0.00376 できる, 0.00364 内, 0.00333 ギルド, 0.00327 VRMMO, 0.0032 空間, 0.0032 システム, 0.00303 攻略, 0.00296 初, 0.00294 まで, 0.0029 しかし, 0.00281 カード, 0.00277 ダンジョン, 0.00274 サバイバル, 0.00252 として, 0.00252 デスゲーム, 0.00251 イベント, 0.0025 しまう, 0.00242 VRMMORPG, 0.00236 RPG, 0.00228 ログアウト, 0.00225 型, 0.00219 しまっ, 0.00217 始め, 0.00215 仲間, 0.00213 たち, 0.00212 サービス, 0.0021 なり, 0.00208 レベル, 0.00206 られる, 0.00202 開始, 0.00202 スキル, 0.00195 条件, 0.00195 万, 0.00195 なく, 0.00194 キャラクター, 0.0019 発売, 0.00188 人気, 0.00186 これ, 0.00183 VR, 0.00183 とある, 0.00183 Online, 0.00179 的, 0.00176 大, 0.00175 MMORPG, 0.00173 数, 0.00173 名, 0.00171 最強, 0.00171 不能, 0.0017 VRMMO, 0.00166 マスター, 0.00164 RPG, 0.00162 ログイン, 0.00157 逃避, 0.00155 ボス, 0.00154 せ, 0.00153 一つ, 0.00151 不可能, 0.0015 始まる, 0.0015 生き残る, 0.0015 バグ, 0.00148 あっ, 0.00148 クエスト, 0.00147 罰, 0.00146 通称, 0.00142 出来る, 0.00138 β, 0.00137 行わ, 0.00136 手, 0.00135 キャラ, 0.00134 目指す, 0.00133 友人, 0.0013 度, 0.0013 ルール, 0.00128 バーチャル, 0.00127 探索, 0.00126 事, 0.00126 開発, 0.00125 World
time-id #4: 0.0749 ゲーム, 0.0251 現実, 0.0105 お願い, 0.00949 プレイヤー, 0.00847 よろしく, 0.00762 や, 0.00744 仮想, 0.00741 オンライン, 0.00708 テスト, 0.00677 プレイ, 0.00632 リアル, 0.00629 参加, 0.00543 モンスター, 0.00511 冒険, 0.00465 脱出, 0.00465 評価, 0.00454 迷宮, 0.00433 クリア, 0.00417 ネット, 0.00416 閉じ込め, 0.00409 達, 0.00407 VRMMO, 0.00389 感想, 0.00382 内, 0.0037 できる, 0.00352 ギルド, 0.00323 システム, 0.00322 攻略, 0.00314 ダンジョン, 0.00309 しかし, 0.003 デスゲーム, 0.003 空間, 0.00298 まで, 0.00289 初, 0.00281 カード, 0.00275 VRMMORPG, 0.00272 として, 0.00265 ログアウト, 0.00256 しまう, 0.00256 サバイバル, 0.00254 イベント, 0.00239 RPG, 0.00229 型, 0.00228 スキル, 0.00224 しまっ, 0.00224 たち, 0.00223 始め, 0.00222 仲間, 0.00216 サービス, 0.00215 開始, 0.00214 レベル, 0.00212 VR, 0.00208 万, 0.00208 られる, 0.00207 Online, 0.00207 キャラクター, 0.00205 なり, 0.00204 なく, 0.00197 条件, 0.00194 人気, 0.00194 これ, 0.00194 発売, 0.00193 VRMMO, 0.00191 MMORPG, 0.00188 とある, 0.00184 的, 0.00178 不能, 0.00177 最強, 0.00177 数, 0.00175 名, 0.00174 大, 0.00171 ログイン, 0.00168 マスター, 0.0016 一つ, 0.00159 せ, 0.00159 ボス, 0.00157 RPG, 0.00155 クエスト, 0.00155 あっ, 0.00151 β, 0.00151 通称, 0.00151 始まる, 0.00151 不可能, 0.0015 バグ, 0.0015 生き残る, 0.00147 逃避, 0.00141 出来る, 0.00141 キャラ, 0.0014 手, 0.00139 目指す, 0.00138 罰, 0.00137 友人, 0.00133 行わ, 0.00133 度, 0.00132 廃人, 0.00131 開発, 0.00131 事, 0.00129 World, 0.00128 探索, 0.00127 ルール
time-id #5: 0.0738 ゲーム, 0.0224 現実, 0.0104 プレイヤー, 0.00735 オンライン, 0.0073 仮想, 0.00711 プレイ, 0.00707 テスト, 0.00644 お願い, 0.00633 参加, 0.0061 や, 0.00582 リアル, 0.00548 よろしく, 0.00537 モンスター, 0.00513 VRMMO, 0.00476 冒険, 0.00457 クリア, 0.00452 脱出, 0.00447 迷宮, 0.00414 達, 0.00403 ネット, 0.00392 内, 0.00392 閉じ込め, 0.00373 デスゲーム, 0.00371 ギルド, 0.00358 できる, 0.00348 ダンジョン, 0.00345 評価, 0.00338 攻略, 0.00329 しかし, 0.00326 システム, 0.00315 ログアウト, 0.00307 VRMMORPG, 0.00303 まで, 0.00291 として, 0.00288 初, 0.0028 カード, 0.00278 空間, 0.00271 感想, 0.00262 しまう, 0.00254 スキル, 0.00252 イベント, 0.0025 VR, 0.0024 Online, 0.00238 サバイバル, 0.00238 RPG, 0.00233 たち, 0.00231 開始, 0.00229 始め, 0.00228 しまっ, 0.00227 型, 0.00227 仲間, 0.00222 万, 0.00221 VRMMO, 0.00219 サービス, 0.00217 キャラクター, 0.00214 レベル, 0.00211 なく, 0.00207 られる, 0.00203 MMORPG, 0.00202 これ, 0.002 条件, 0.00198 なり, 0.00198 人気, 0.00196 発売, 0.00192 とある, 0.0019 不能, 0.00189 的, 0.00181 ログイン, 0.00179 最強, 0.00179 数, 0.00175 名, 0.00171 大, 0.0017 β, 0.00165 マスター, 0.00164 一つ, 0.00163 せ, 0.00163 あっ, 0.0016 クエスト, 0.0016 ボス, 0.00155 通称, 0.00153 不可能, 0.00152 バグ, 0.00152 始まる, 0.00151 生き残る, 0.0015 RPG, 0.00145 キャラ, 0.00144 目指す, 0.00143 手, 0.00142 出来る, 0.00141 廃人, 0.00141 友人, 0.00138 逃避, 0.00137 開発, 0.00135 度, 0.00135 事, 0.00134 World, 0.00133 でき, 0.00131 ユーザー, 0.00131 行わ, 0.00128 死
time-id #6: 0.0733 ゲーム, 0.02 現実, 0.011 プレイヤー, 0.00733 プレイ, 0.00715 オンライン, 0.00715 仮想, 0.00707 テスト, 0.0064 参加, 0.00629 VRMMO, 0.00536 モンスター, 0.00534 リアル, 0.00493 や, 0.00481 クリア, 0.00459 デスゲーム, 0.00438 冒険, 0.00438 脱出, 0.00417 迷宮, 0.00417 達, 0.00399 お願い, 0.00398 内, 0.00394 ギルド, 0.00385 ネット, 0.00377 ダンジョン, 0.00375 閉じ込め, 0.00371 攻略, 0.00367 ログアウト, 0.00355 よろしく, 0.00348 できる, 0.00346 しかし, 0.00336 システム, 0.00332 VRMMORPG, 0.00308 まで, 0.00305 として, 0.00294 VR, 0.00287 スキル, 0.00286 初, 0.00276 カード, 0.00273 Online, 0.00266 しまう, 0.00262 評価, 0.0026 空間, 0.0025 VRMMO, 0.00247 開始, 0.00244 イベント, 0.00237 たち, 0.00235 始め, 0.00233 RPG, 0.00232 しまっ, 0.00231 万, 0.00226 仲間, 0.00224 サバイバル, 0.00222 型, 0.00221 サービス, 0.00215 なく, 0.00212 レベル, 0.00212 これ, 0.00209 キャラクター, 0.00206 条件, 0.00205 MMORPG, 0.00203 られる, 0.00199 発売, 0.00198 感想, 0.00198 人気, 0.00196 不能, 0.00194 とある, 0.00193 的, 0.00193 なり, 0.00188 ログイン, 0.00181 最強, 0.00181 β, 0.00178 数, 0.00174 名, 0.00169 大, 0.00168 あっ, 0.00167 一つ, 0.00166 せ, 0.00163 マスター, 0.00161 通称, 0.00161 クエスト, 0.00155 不可能, 0.00154 ボス, 0.00152 バグ, 0.00152 生き残る, 0.00149 始まる, 0.00148 目指す, 0.00148 廃人, 0.00147 キャラ, 0.00147 手, 0.00145 友人, 0.00141 RPG, 0.00141 開発, 0.00139 でき, 0.00139 度, 0.00139 事, 0.00138 出来る, 0.00138 World, 0.00135 死, 0.00134 ユーザー, 0.0013 逃避, 0.00129 行わ
time-id #7: 0.0737 ゲーム, 0.018 現実, 0.0115 プレイヤー, 0.00754 プレイ, 0.00722 テスト, 0.00712 VRMMO, 0.00701 オンライン, 0.00698 仮想, 0.00649 参加, 0.00537 モンスター, 0.00534 デスゲーム, 0.00494 リアル, 0.00484 クリア, 0.00423 脱出, 0.00416 達, 0.00415 や, 0.00412 ギルド, 0.00406 攻略, 0.00404 冒険, 0.00403 ログアウト, 0.00398 内, 0.00388 ダンジョン, 0.00384 迷宮, 0.00366 閉じ込め, 0.00366 ネット, 0.00359 しかし, 0.00344 できる, 0.00341 VRMMORPG, 0.00339 システム, 0.00329 VR, 0.00318 として, 0.00316 スキル, 0.00311 まで, 0.00298 Online, 0.00284 初, 0.00273 しまう, 0.0027 VRMMO, 0.00269 カード, 0.00268 お願い, 0.00258 開始, 0.00247 空間, 0.00245 よろしく, 0.00238 始め, 0.00238 しまっ, 0.00235 たち, 0.00233 イベント, 0.00232 万, 0.00229 RPG, 0.00224 仲間, 0.00221 これ, 0.0022 サービス, 0.00216 型, 0.00215 サバイバル, 0.00215 なく, 0.00211 条件, 0.0021 レベル, 0.0021 評価, 0.00201 発売, 0.00199 MMORPG, 0.00198 られる, 0.00197 人気, 0.00195 不能, 0.00195 とある, 0.00194 的, 0.00194 ログイン, 0.00193 キャラクター, 0.00191 なり, 0.00187 β, 0.00186 最強, 0.00177 数, 0.00173 名, 0.0017 一つ, 0.00169 せ, 0.00169 大, 0.00169 あっ, 0.00165 通称, 0.00161 クエスト, 0.00159 感想, 0.00156 不可能, 0.00155 マスター, 0.00154 生き残る, 0.0015 ボス, 0.0015 目指す, 0.0015 バグ, 0.00149 廃人, 0.00149 手, 0.00147 友人, 0.00147 キャラ, 0.00145 度, 0.00144 始まる, 0.00144 でき, 0.00144 開発, 0.00143 事, 0.0014 死, 0.00139 ユーザー, 0.00139 World, 0.00136 出来る, 0.00135 と共に, 0.00134 RPG, 0.00134 VR
time-id #8: 0.0748 ゲーム, 0.0167 現実, 0.0117 プレイヤー, 0.00785 プレイ, 0.00748 テスト, 0.00745 VRMMO, 0.00697 オンライン, 0.00668 仮想, 0.00664 参加, 0.00577 デスゲーム, 0.00531 モンスター, 0.00477 クリア, 0.00466 リアル, 0.00449 攻略, 0.00417 脱出, 0.00417 ログアウト, 0.00412 ギルド, 0.00401 達, 0.00386 内, 0.00379 ダンジョン, 0.00375 冒険, 0.00369 や, 0.00367 しかし, 0.00361 迷宮, 0.00358 閉じ込め, 0.00354 できる, 0.00352 ネット, 0.0035 VR, 0.00341 スキル, 0.00334 VRMMORPG, 0.00326 として, 0.00326 システム, 0.00309 まで, 0.00309 Online, 0.00283 しまう, 0.00281 初, 0.0028 VRMMO, 0.00266 カード, 0.0026 開始, 0.00243 しまっ, 0.00237 空間, 0.00237 万, 0.00237 始め, 0.00232 たち, 0.00229 仲間, 0.00227 RPG, 0.00226 これ, 0.00223 イベント, 0.00218 サービス, 0.00215 条件, 0.00213 レベル, 0.00209 なく, 0.00208 サバイバル, 0.00208 型, 0.00203 お願い, 0.00202 発売, 0.00201 ログイン, 0.00197 人気, 0.00194 的, 0.00194 最強, 0.00193 とある, 0.00193 られる, 0.00192 MMORPG, 0.00191 不能, 0.00189 よろしく, 0.00189 なり, 0.00188 キャラクター, 0.00183 β, 0.00182 評価, 0.00174 名, 0.00173 数, 0.00171 せ, 0.0017 一つ, 0.00168 大, 0.00164 あっ, 0.00163 通称, 0.00157 生き残る, 0.00157 不可能, 0.00155 クエスト, 0.00152 マスター, 0.00152 廃人, 0.00151 目指す, 0.0015 度, 0.0015 バグ, 0.0015 手, 0.00149 友人, 0.00148 ボス, 0.00147 キャラ, 0.00146 でき, 0.00143 事, 0.00143 ユーザー, 0.00142 開発, 0.00142 死, 0.00141 始まる, 0.0014 VR, 0.00139 と共に, 0.00139 感想, 0.00136 World, 0.00136 職業, 0.00136 出来る
time-id #9: 0.0758 ゲーム, 0.0161 現実, 0.0113 プレイヤー, 0.00802 プレイ, 0.00779 テスト, 0.00748 VRMMO, 0.00701 オンライン, 0.00667 参加, 0.00636 仮想, 0.00603 デスゲーム, 0.00527 モンスター, 0.00495 攻略, 0.00482 クリア, 0.00449 リアル, 0.00415 ログアウト, 0.00415 脱出, 0.00395 ギルド, 0.00385 達, 0.00379 ダンジョン, 0.0037 内, 0.0037 しかし, 0.00361 冒険, 0.00361 スキル, 0.0036 VR, 0.00359 できる, 0.00349 閉じ込め, 0.00348 や, 0.00348 迷宮, 0.00342 ネット, 0.00329 として, 0.00324 VRMMORPG, 0.00313 システム, 0.00312 Online, 0.00305 まで, 0.00287 しまう, 0.00284 VRMMO, 0.00279 初, 0.00266 カード, 0.00253 開始, 0.00245 しまっ, 0.0024 万, 0.00233 空間, 0.00231 仲間, 0.0023 始め, 0.00229 これ, 0.00226 たち, 0.00225 RPG, 0.00218 条件, 0.00218 レベル, 0.00218 イベント, 0.00214 サービス, 0.00207 ログイン, 0.00206 なく, 0.00205 サバイバル, 0.00203 最強, 0.00202 発売, 0.00201 型, 0.00197 人気, 0.00194 的, 0.00193 とある, 0.00188 られる, 0.00188 なり, 0.00188 MMORPG, 0.00186 不能, 0.00185 キャラクター, 0.00179 β, 0.00175 お願い, 0.00173 名, 0.0017 せ, 0.00169 一つ, 0.00169 評価, 0.00168 数, 0.00167 大, 0.00164 よろしく, 0.00163 あっ, 0.0016 通称, 0.0016 生き残る, 0.00156 不可能, 0.00154 度, 0.00154 廃人, 0.00153 目指す, 0.00152 マスター, 0.00152 手, 0.00151 友人, 0.00149 クエスト, 0.00149 ボス, 0.00148 でき, 0.00147 バグ, 0.00147 キャラ, 0.00143 ユーザー, 0.00143 VR, 0.00142 死, 0.00141 開発, 0.00141 事, 0.00139 と共に, 0.00139 始まる, 0.00139 職業, 0.00137 ステータス, 0.00137 出来る, 0.00134 World

これから,次のようなことが分かります.

  • トピック0はゲームに関連するジャンルである.
  • トピック0では最近になって"デスゲーム"や"VRMMO"という単語がよく出現するようになった.

どうみてもソードアートオンラインの影響です本当にありがとうございました.

ついでにトピック内での頻出単語の変化をグラフにしてみました.
トピック0:f:id:se-kichi:20130429012827p:plain
トピック30: f:id:se-kichi:20130429012846p:plain

最後に各トピックの流行り廃りを見てみます.トピック名は手動でそれっぽいのを付けました…….
f:id:se-kichi:20130429013221p:plainf:id:se-kichi:20130429013230p:plainf:id:se-kichi:20130429013234p:plain
噂通り異世界転生が大人気でした本当にありがとうございました. ちなみに個人的にはゲームのジャンルがもうちょっと人気になっていると思っていたので意外でした.

ソースコード

そのうちGithubに上げます (多分).

まとめ

  • この記事では「小説家になろう」に掲載されている全小説のあらすじに対してトピックモデルを利用することで,小説のジャンルやジャンルの流行り廃りを分析しました.
  • ジャンルの流行り廃りを分析したところ異世界転生最強俺TUEEの人気が急上昇していることがわかりました (ちょっと言いすぎですが)
  • もうちょっと色々考察できそうなもんですが時間がないのでこれだけで勘弁してください……

今後の課題

今回は「小説家になろう」に掲載されている小説のみを分析の対象としましたが,ラノベの杜とAmazonのAPIを組み合せて商業作品を解析してみるのも面白かったかもしれません.Web小説のジャンル間の相関関係をCorrelated Topic Models (CTM)を使って解析してみたり,SAOやハルヒといった有名作品がWeb小説に影響を与えたかどうかを見てみるのも面白いかもしれません.

参考文献

おまけ

久々に長い記事書いて凄い疲れた…….定期的にoutputしてかないとダメダメですねー…….

*1:公式サイトの情報より多いぞ……

LaTeX Beamer 小ネタ集

気付けば卒論の試問会もBeamerで乗り切ってしまいました.ということで小ネタ集.

pdfの栞の文字化けを防ぐ

プリアンブルに以下を追加.栞は section や subsection で挿入可能

\ifnum 42146=\euc"A4A2
\AtBeginDvi{\special{pdf:tounicode EUC-UCS2}}
\else
\AtBeginDvi{\special{pdf:tounicode 90ms-RKSJ-UCS2}}
\fi

元ネタ

背景の図を設定

プリアンブルに以下を追加.

\usebackgroundtemplate{
  \includegraphics[width=\paperwidth,height=\paperheight]{image/bg}
}
途中のページで背景の画像を変えたくなった

\frame { ... } の代わりに

{
  \usebackgroundtemplate{\includegraphics[width=\paperwidth]{image/bg2}}
  \frame{
    %% ...  
  }
}
フォントを変えたい (or 埋め込みたい)

PXchfon とかどうですか.

ページのタイトルの色やフォントを変更したい

プリアンブルに以下を追加.

\setbeamerfont{frametitle}{size=\Huge, series=\bfseries}
\setbeamercolor{frametitle}{fg=white}
テキストの色を変更

プリアンブルに以下を追加.

\setbeamercolor{normal text}{fg=black, bg=white}
block の設定

alertblockのタイトルと本体の色を設定する例 (プリアンブルに追加).

\setbeamercolor{block title alerted}{bg=red!50!white, fg=black}
\setbeamercolor{block body alerted}{bg=red!10!white, fg=black}
ヘッダのサイズ変えたい

パワポの背景をパクると「\frametitle{...} で表示させる文字列の位置を調整したい!」となるよね.
以下は私の設定 (プリアンブルに追加).raisebox以外に良い方法があったら誰か教えて下さい.

\setbeamertemplate{frametitle}{\raisebox{-18pt}[0pt][12mm]{\insertframetitle}}
箇条書きの行頭記号を変更したい

四角形+赤色の例 (プリアンブルに追加)

\setbeamercolor{item}{fg=red}
\setbeamertemplate{items}[square]

記号は default, square, circle, ball が存在.itemize環境を変更したいが,enumerate環境等を変更したくない場合は

\setbeamercolor{itemize item}{fg=red}
\setbeamertemplate{itemize items}[square]
ソースコードを貼り付けたい

listings.sty を利用する.日本語を使いたければ jlistings.sty も.
プリアンブルに以下を挿入.lstset 内の language を指定しておくと,挿入の際に毎回言語を指定しなくて良くなり楽.

\usepackage{listings}
\lstset{
  %% language={C}, %プログラミング言語によって変える。
  basicstyle={\ttfamily\small},
  keywordstyle={\color{blue}},
  commentstyle={\color{green}},
  stringstyle=\color{red},
  tabsize=2,
  %% breaklines=true, %折り返し
}

貼り付けの際は frame 環境に fragile オプションが必須.以下は例.

\begin{frame}[fragile]
  \frametitle{Factory によるクラス群の隠蔽}
  \begin{lstlisting}[language={Csharp}]
class DOMBuilderTest : TestCase {
  private OutputBuilder builder;
  public void testAddAboveRoot() {
    string invalidResult = "<orderes>" + ...;
    _builder = new DOMBuilder("orders");_
    builder.addBelow("order");
    try {
      ...
    }
  }
}
  \end{lstlisting}
\end{frame}


「標準でC#無いじゃねえかゴラァ」ってときは以下を追加.他の言語でも似たような感じでOKでしょう.

\lstdefinelanguage{CSharp} {
  morecomment = [l]{//},
  morecomment = [l]{///},
  morecomment = [s]{/*}{*/},
  moredelim=[is][\underbar]{_}{_},
  morestring=[b]",
  sensitive = true,
  morekeywords = {abstract,  event,  new,  struct, var,
    as,  explicit,  null,  switch,
    base,  extern,  object,  this,
    bool,  false,  operator,  throw,
    break,  finally,  out,  true,
    byte,  fixed,  override,  try,
    case,  float,  params,  typeof,
    catch,  for,  private,  uint,
    char,  foreach,  protected,  ulong,
    checked,  goto,  public,  unchecked,
    class,  if,  readonly,  unsafe,
    const,  implicit,  ref,  ushort,
    continue,  in,  return,  using,
    decimal,  int,  sbyte,  virtual,
    default,  interface,  sealed,  volatile,
    delegate,  internal,  short,  void,
    do,  is,  sizeof,  while,
    double,  lock,  stackalloc,
    else,  long,  static,
    enum,  namespace,  string}
}
ページ内のテキストを上に揃えたい

パワポのテキストって開始位置が上の方に固定されてるけど,beamerってテキストが中央に揃えられるよねー,っていう話.

\frame[t] {
  %% ...
}
アニメーションもどき

プレゼン中に図がアニメーションするのではなく,ページ毎に図を切り替えていくだけで良いなら beamerscape とかが便利かも.
inkscapeSVGを作成→レイヤーの名前に「どのページで表示させるか」という情報を入れておく→export_overlaysでSVGをpdfに分割+利用するためのtexファイルを吐かせる みたいな流れ.書いてて全然便利に見えなくてウケる.

verbatime 使いたい

containsverbatim の s を忘れて悩んだのは良い思い出です.

\frame[containsverbatim] {
  %% ...
}
OMakefile

platexのオプションに -interaction=nonstopmode を付けておくと,エラー発生時に入力を求めて来なくなって幸せ.

LATEX = platex -interaction=nonstopmode
LATEXFLAGS = -shell-escape -kanji=euc
DVIPDFM = dvipdfmx
DVIPDFMFLAGS = -V 6
TETEX2_ENABLED = false

TARGET = slide

LaTeXDocument($(TARGET), $(TARGET))

.PHONY: clean
.DEFAULT: $(TARGET).dvi $(TARGET).pdf

clean:
	rm -rf *.toc *.log *.dvi *.fls *.aux *.snm *.nav *.out *.bbl *.blg *.vrb

エラーが見にくいので適当なシェルスクリプトの関数を作って利用.

# colors (256color)
COLOR_NORMAL=`echo -e "\033[0;38m"`
COLOR_RED=`echo -e "\033[1;31m"`
COLOR_BLUE=`echo -e "\033[0;38;5;14m"`
COLOR_GREEN=`echo -e "\033[0;38;5;120m"`
COLOR_YELLOW=`echo -e "\033[0;38;5;226m"`

function comake() {
    LANG=C omake "$@" 2>&1 | sed \
        -e "s@[Ee]rror:.*@$COLOR_RED&$COLOR_NORMAL@g"\
        -e "s@cannot\sfind.*@$COLOR_RED&$COLOR_NORMAL@g"\
        -e "s@[Ww]arning:.*@$COLOR_BLUE&$COLOR_NORMAL@g"\
        -e "s@^[Ww]arning.*@$COLOR_BLUE&$COLOR_NORMAL@g"\
        -e "s@\*\*\* omake: done .*@$COLOR_GREEN&$COLOR_NORMAL@g"\
        -e "s@^File .*@$COLOR_YELLOW&$COLOR_NORMAL@g"
}

KMC春合宿2012

今年もサークル (http://www.kmc.gr.jp) の春合宿に行ってきた.

合宿では部員による講座(90分)が行われるのだが,ここ数年部員が単調増加した結果,講座の枠が足りなくなった.そんなこんなで例年は3泊4日なのだが,今年から4泊5日の合宿となった.

以下は覚えている範囲で講座の感想とか.講演者は秘密にしておく.

Parameterized Complexity

Fixed Parameter Tractable (FPT) のお話.
木幅,k-パス問題は何となく分かったような分からなかったような.他はサッパリ.

ゲームAI

オライリー「ゲーム開発者のためのAI入門」が元ネタだったっぽい.
経路探索とか有限状態機械とかファジー理論とかの話だった.

伝説の蟹本

C言語による Short Coding のお話.
聴衆は私も含めて Short Coding 初心者ばっかりだったため,笑いにあふれた講座だった.

わペド(私はペンシルパズルでドライアイになりました、の略)

ましゅ,スリザーリンク,ぬりかべ の解き方解説 + 自作問題配布.
次の私の講座でネタに使えたらなーと思ってSATソルバで解こうとしてたけど,途中バグって解ききれなかった.敗北

僕が一番SATソルバーをうまく使えるんだ!

俺.パズルを解いたり合宿の講座の時間割をどうやって決めたかを話した.
後半は時間が余ったのでLuaの話.参加しているゲームプロジェクトにLuaを組み込んだ話やLuaの布教.

僕の考えた最強のジャッジシステム + Webデザインの意識の高め方

ジャッジシステムを作る上で気を付けるべきことや,Twitter Bootstrap の話を聞いた気がする.

シェーダであそぼ

HLSL によるシェーダ入門.文法解説→ライティングとか環境マッピングとか だった気がする.
ここ最近 Cg のお勉強をしていたので,復習目的の気分で聞きに行った.しかし HLSL と Cg ってホントそっくりなのね.

童貞が教える本当に気持ちのいいNode.js

Node.js,WebScoket,CofeeScript とかそんなお話.
web開発〜〜な世界はサッパリでそろそろ人権無い気がしていてツラい.何か作って遊んでみないとなぁ.

jQuery+JsRender+JsViewで勝ちまく(ry

JavaScriptのテンプレートエンジンの解説.
後半のライブコーディングのあたりは意識が飛んでしまって申し分けないことをした.