2015/01/15

(前後の文字を考慮した)カタカナ名前ジェネレータを作った

まとめ:
タイトル通りのものを作りました。
ここで使えます。
決めうちじゃないので、なかなか同じ名前はでない……はず。


背景(1):
「世界樹」とかプレーしているとカタカナの名前を入力する機会が多いです。
が、いい名前なんてそう簡単に思いつきません。
こういうときにいい感じの名前ジェネレータが欲しくなります。

ゲームとかについてる名前ジェネレータは大きく2タイプあるような気がします。
・完全ランダム:正直使い物にならない。
・決めうち:パターンがあんまりない。FFTみたいな例外はある。

ということで、作りましょう。

背景(2):
うちの子まとめβという素晴らしいデータセットがあるのに、
使わないのはもったいない。
開発者からもプレッシャーをかけられている気がする。

結果:
とりあえず一度回してみましょう。

フォルナ アクア  ヒトリ  ルシェッティ ハイル
ギリス  アキック ヴェラ  コロ     アルドラッサ
イヴ   ヒルト  ナナコ  ジア     イオドラト
ガオ   レナス  リベッツ ルヴァリ   カイキ

次は完全にランダムに生成した場合です。
(具体的には print ('ア'..'ン').to_a.sample(3).join + "\n" @ ruby)

ョハル エゾヨ トクヱ オィポ ギモニ
ナクワ ンヲユ ヤラェ ロベギ マジバ
ペクツ ホィレ ナジダ ハォウ カヨヰ
ラワゥ ヨャゥ スミゥ スドナ ウロヨ

ちょっとランダムの方の結果が極端に悪い気もしますが、
上の結果の方が実戦で使えそうな気がします。

以下は、微妙にテクニカルなので興味ない方はここまででも大丈夫です。
こちらからジェネレータでおあそびください。


考察:
完全ランダムがいまいちな原因としては、
あるべきでない場所にある文字がある->文頭の「 ョ」、 「ハ」の後ろの「ォ」
がまず考えられます。

とはいえ、そういうわけでもないものもどこか今ひとつな感じがあります。
おそらく、名前には使いやすい文字というものがあるのではなかろうかと思います。
実際、出現頻度にそれなりの差がありそうなことは去年の記事でも書きました。

また、完全に推測なのですが、
後ろに続く文字は前の文字の影響を受けているような気がします。
例えば、アの後ろにはギはこなそうだけど、ガの後のギは自然な気がするというように。
(アギーレとか言ってはいけない)
ということで、
・あるべきでない場所の文字がでないようにする
・使いやすい文字が出やすいようにする
・前の文字との繋がりやすさを考慮する
の3点を踏まえて実装を考えます。


実装方針:
各文字及び出現位置ごとに、次の文字の出現確率を求めます。
例えば[1文字目,ア->イ, 0.01], [2文字目,ア->ガ, 0.005],[1文字目,ョ->ガ, 0.00]のように。
また、1文字目で出現する確率、その文字で名前が終わる確率も併せて求めます。

そうすると、
1文字目を決める->1文字目から2文字目につながる確率がわかる->
2文字目を決める->2文字目から3文字目につながる確率がわかる-> ...
のように連鎖的に名前を生成することができます。

これによって
・あるべきでない場所の文字がでないようにする->その位置の確率を低くする
・使いやすい文字が出やすいようにする->使いやすい文字は確率が高くなるようにする
・前の文字との繋がりやすさを考慮する->前の文字と後ろの文字のペアで確率を決める
という感じで上の要件がクリアできます。

ここで重要になるのが、各文字ごとの次に出現する文字の確率をどう決めるかです。

今回は「うちの子まとめβ」のデータを活用します。
ここに登録されたキャラクターの名前を取得し、
例えばアの後にどれだけイが続くのかということを実際に数え上げます。
これをすべての文字の組み合わせに対して行うことで確率を決定します。

しのごの言わずにソースを貼れという話もあると思いますので、貼っときます。
なんかハッシュ周りがかなり酷いことになってしまいました…




謝辞
・うちの子まとめβ開発者のしおりもさんにバグ取りに付き合っていただきました。
 ありがとうございました。

以上です。
ジェネレータはこちら

2015/01/02

歌ってみたにおける男子優位性を検証する (1)

まとめ
いろいろ検証方法に問題はあるが、男性の方が多そうではある




いんとろだくしょん

例えば、『千本桜』の歌ってみたを再生数順に並べると……
1位:ぐるたみん
2位:96猫ぽこた
3位:recog
4位:蛇足
5位:いさじ

例えば、『モザイクロール』の歌ってみたを再生数順に並べると……
1位:そらる
2位:vip店長
3位:ナノ
4位:LOLI.COM
5位:Gero

あれ、男性の方が上位とりやすいんじゃね?


調査方法

対象となる楽曲について、
再生数上位32個の歌ってみたにの中に男性/女性がいくつあるか数えます。

とはいうものの全部聞くのはしんどいので、ニコニコ動画のタグを利用します。

大百科の歌い手一覧というページに歌い手の性別が書いてあるので、
それを利用して男性に入っている歌い手のタグがあったら男性に+1回というように数えます。


結果


曲名 男性 女性
【初音ミク】みくみくにしてあげる♪【してやんよ】 4 8
初音ミク が オリジナル曲を歌ってくれたよ「メルト」 9 12
『初音ミク』千本桜『オリジナル曲PV』 14 4
初音ミク が オリジナル曲を歌ってくれたよ「ワールドイズマイン」 10 17
【GUMI】モザイクロール【オリジナル曲PV付】 16 7
初音ミクオリジナル曲 「初音ミクの消失(LONG VERSION)」 9 13
【巡音ルカ】ダブルラリアット【オリジナル】 17 5
初音ミク・巡音ルカ オリジナル曲 「ワールズエンド・ダンスホール」 18 6
初音ミクがオリジナルを歌ってくれたよ「ブラック★ロックシューター」 16 13
【鏡音リン】炉心融解【オリジナル】  12 10
「ロミオとシンデレラ」 オリジナル曲 vo.初音ミク 17 9
「卑怯戦隊うろたんだー」をKAITO MEIKO 初音ミクにry【オリジナル】修正版 14 1
【初音ミク】カゲロウデイズ【オリジナルPV】 16 3
初音ミク オリジナル曲 「裏表ラバーズ」 16 2
【オリジナル曲PV】 パンダヒーロー 【GUMI】 20 5
【オリジナル曲PV】結ンデ開イテ羅刹ト骸【初音ミク】 14 7
VOCALOID2 初音ミクに「Ievan Polkka」を歌わせてみた 6 9
初音ミク オリジナル曲 「ローリンガール」 22 7
【IA】チルドレンレコード【オリジナルPV】 17 5
【GUMI】弱虫モンブラン【オリジナル曲PV付】 13 8
【調教すげぇ】初音ミク『FREELY TOMORROW』(完成)【オリジナル】 6 5
【IA】六兆年と一夜物語【オリジナル曲・PV付】 17 8
【鏡音レン】悪ノ召使【中世物語風オリジナル】 8 7
天ノ弱/164 feat.GUMI 13 8
【初音ミクオリジナル曲】*ハロー、プラネット。【ドットPV】 8 7

平均は男性:13.28 女性:7.44
(等分散を仮定しない)t検定で危険率0.1%未満で有意差が見られました。



感想

やっぱり男性が多いですね。
「みくみく」「メルト」「ワールドイズマイン」など初期の曲の方が女性優位な感があります。


課題

とはいうものの今回の分析はかなり課題が残っています。

①そもそも男性の方が女性より投稿数が多いのでは?
 →全歌ってみたを調べるのは無理。対抗策は、最近100件の歌ってみたを調べてみるとか。

②歌い手一覧があてにならないことがある
 →例えば、上でも挙げた歌い手である96猫さんは、歌い手一覧では『96猫(響希ナツメ)
   として登録されています。タグが『96猫』としかない場合、現状ではヒットしません。

③男性+1されたが、本当に歌い手が男性と言い切れない
  →例えば、女性歌い手で男性MIXの場合どちらの名前もタグに入っている場合、
   現状では男性・女性ともに+1してしまっています。
   これに対抗するためには、例えばアップロード者の名前を使うという策が考えられます。

2015/01/01

Latexで◯1を綺麗に出力するシンプルな方法

http://tex.stackexchange.com/questions/7032/good-way-to-make-textcircled-numbers
  が元ネタです

まとめ:\newcommand{\maru}[1]{\raisebox{.5pt}{\textcircled{\raisebox{-.9pt} {{\small #1}}}}} でok

2015/01/13追記:
caption内で使うなら
\newcommand{\maru}[1]{\raisebox{.5pt}{\textcircled{\raisebox{-.9pt} {{\footnotesize #1}}}}} の方がいいかも。


Latexには\textcircledっていう◯1とか◯Aとか出力するための関数があります。
ただ、下の図の上側みたいに文字がずれて表示されてしまい
残念な気持ちになります。
そこで、
\newcommand{\maru}[1]{\raisebox{.5pt}{\textcircled{\raisebox{-.9pt} {{\small #1}}}}}
というように\maruコマンドを定義してやると、
下のような感じに文字が綺麗に収まります。

上で上げた元ネタでは\smallは入れていなかったのですが、
これをつけたほうが文字が縁に触れずに綺麗だと思います。

以上です。

2015/01/13追記:
フォントサイズを\small固定にしてしまっているので、
文字が小さい箇所ではあんまりうまく動かないみたいです。
具体的に言うとcaptionだと文字がずれるのを確認しました。

なので、caption内で使うことが見込まれるときは
\newcommand{\maru}[1]{\raisebox{.5pt}{\textcircled{\raisebox{-.9pt} {{\footnotesize #1}}}}}
とした方がいいようです。

脚注で使う場合は
\newcommand{\maru}[1]{\raisebox{.5pt}{\textcircled{\raisebox{-.9pt} {{\scriptsize #1}}}}}
となるのでしょうか。