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

餅屋LGTM

餅つきのあとの静けさ

本当に語彙力がないのは誰なのか〜居場所で殴り合い編〜

この前書いたこれについて居場所*1でやると良いのではという意見をいくつかもらったのでやってみた

より公平な分析のために

前回は最新900ツイートを対象に解析したがそれが果たして公平なのだろうかという疑念があったため今回は

  1. ツイート数を揃える
  2. 延べ出現単語数を揃える

の2つのやり方で比較してみる。
また、リプライは解析から除外することにした。

結果

ツイートの取得は2016-12-15 19:00

1.ツイート数を揃えた場合

今回はそれぞれの1749ツイートを分析した

おとくん(居) ぼく(場) ksk(所) 森(補佐)
延べ単語数 19483 15292 16243 19518
1ツイートの平均文字数 21.45 17.82 17.77 21.42
名詞 2230 2088 1984 2126
動詞 510 461 538 554
未知語 300 303 180 248
副詞 175 126 159 168
形容詞 102 101 95 106
助詞 81 82 63 64
感動詞 36 25 23 37
記号 35 37 25 23
接頭詞 27 22 23 20
接続詞 26 26 20 22
助動詞 21 17 19 18
連体詞 16 14 15 14
フィラー 6 5 5 9
その他 1 1
出現単語数 3566 3308 3149 3409
おとくん(居) ぼく(場) ksk(所) 森(補佐)
2.延べ出現単語数を揃えた場合
おとくん(居) ぼく(場) ksk(所) 森(補佐)
延べ単語数 19483 19485 19486 19491
取得ツイート数 1749 2254 2153 1747
1ツイートの平均文字数 21.45 17.5 17.35 21.42
名詞 2230 2475 2205 2123
動詞 510 525 594 553
未知語 300 336 196 248
副詞 175 148 176 168
形容詞 102 117 111 106
助詞 81 87 67 64
感動詞 36 28 26 37
記号 35 39 26 23
接頭詞 27 24 26 20
接続詞 26 27 20 22
助動詞 21 20 20 18
連体詞 16 17 15 14
フィラー 6 7 6 9
その他 1 1
出現単語数 3566 3851 3488 3405
おとくん(居) ぼく(場) ksk(所) 森(補佐)

KH Coderを使ってみる

せっかくなので特徴語とかも調べてみようということでテキストマイニングソフトのKH Coderを使ってみる。

なお自分の環境はUbuntu 16.04.1 LTS

1.ダウンロード

このページからソースコードをダウンロードし、解凍する。
あとは$ perl kh_coder.plで起動するはずですが、最初はいろんなモジュールがないと怒られると思うので、順番に

$ cpan モジュール名

でインストール

2. 環境設定

起動できたらまずconfig/coder.iniを開き

mysqlのユーザ名とパスワードを追加
次にMeCabの辞書としてmecab-ipadic-NEologdを使いたいのでkh_lib/kh_morpho/linux/mecab.pmを開き、 32行目を変更

- $self->{cmdline} = "mecab $rcpath -Ochasen -o \"$self->{output_temp}\" \"$self->{target_temp}\"";
+ $self->{cmdline} = "mecab $rcpath -d/usr/lib/mecab/dic/mecab-ipadic-neologd -Ochasen -o \"$self->{output_temp}\" \"$self->{target_temp}\"";
3. プロジェクトの作成と前処理

公式にチュートリアルのスライドがあるので参考にしながらやっていきます。 KH Coderでは<H1>タグで見出しをつけることで文章を区切ることができるので、ゴミを除いたツイートデータを

<H1>おとくんのtweet</H1>
ツイート1
ツイート2
...
<H1>kskのtweet</H1>
...

のようにまとめます。
そうして前処理を実行しようとしたところ

f:id:umaz1051:20161213143710p:plain

ファイルを細かく分け調べたところ引っかかっていたのは
\( 'ω')/ウオオオオオアアアーーーッ!」でした。どうやら「」が原因のようなのでこれを削除して再び前処理を実行すると

f:id:umaz1051:20161213144303p:plain

うまくいきました。

4. 特徴後の抽出

スライドの4章を参考にしながら特徴語の抽出。デフォルトの設定では10語しかリストアップされないので、kh_lib/gui_window/outvar_list.pmの462行目を

- for (my $n = 0; $n <= 10; ++$n){                    # 中身
+ for (my $n = 0; $n <= 30; ++$n){                    # 中身

kh_lib/gui_window/outvar_list/midashi.pmの75行目を

- last if $n >= 10;
+ last if $n >= 30;

と変更

結果は

おとくんのtweet ぼくのtweet kskのtweet 森のtweet
x 0.0729 x 0.0365 思う 0.0387 思う 0.0453
感じ 0.0274 飲む 0.0207 行く 0.0266 寝る 0.0369
行く 0.0256 気持ち 0.0181 明日 0.022 今日 0.0299
明日 0.0213 人生 0.0175 言う 0.0219 食べる 0.0257
0.0207 来る 0.0172 見る 0.0218 0.0251
??? 0.0179 0.0158 時間 0.0171 言う 0.0249
寒い 0.0157 0.0155 テスト 0.0154 感じ 0.0226
マジで 0.0149 F3 0.014 レポート 0.0152 先生 0.0216
食う 0.0146 厳しい 0.0137 0.0142 痛い 0.02
買う 0.0146 バイ 0.0137 気持ち 0.0134 入る 0.02
終わる 0.0144 痛い 0.0128 来る 0.0133 0.0187
面白い 0.0126 書く 0.012 居場所 0.0128 気づく 0.0181
眠い 0.0126 最高 0.0104 起きる 0.0125 0.018
なんか 0.0125 良い 0.0095 終わる 0.0124 食う 0.0168
痛い 0.0124 シャブ 0.0088 忘れる 0.0116 レポート 0.0166
待つ 0.0117 0.0088 帰る 0.0116 起きる 0.0166
E 0.0116 お腹 0.0088 推進 0.011 風呂 0.016
強い 0.0116 一番 0.0088 良い 0.0108 寒い 0.0157
最近 0.0116 研究室 0.0087 書く 0.0107 0.0148
0.0116 0.0086 仕事 0.0101 0.0145
0.0114 自分 0.0086 自分 0.0099 厳しい 0.0144
忘れる 0.0114 ワイン 0.0079 0.0091 バイ 0.0144
メシ 0.0107 顔本 0.0079 tweet 0.0091 なんか 0.0134
FF5 0.0106 考える 0.0078 全然 0.0091 出る 0.0134
F4 0.0105 死ぬ 0.0078 持つ 0.009 飲む 0.0133
授業 0.0104 疲れる 0.007 出る 0.009 帰る 0.0133
自分 0.0104 人間 0.007 買う 0.0089 0.0132
レポート 0.0103 部屋 0.007 進捗 0.0082 ??? 0.0123
帰る 0.0103 多い 0.0069 ダメ 0.0082 忘れる 0.0122
A6 0.0096 0.0069 Slack 0.0082 時間 0.0122

となりました。なんとなくぽいですね。

5. 対応分析

次に対応分析をしてみます。KH Coderが裏でRを使う(というか丸投げする)のでRのインストールをします www.trifields.jp この辺を参考にしながら入れました。perlと同様にRにもパッケージをインストールしないといけないのですが、気をつけなくてはいけない点としてigraphのパッケージが最新のものでは動かないというのがあります。そこでここからigraph_0.7.1.tar.gzをダウンロードして

$ R
> remove.packages("igraph")
> install.packages("~/Downloads/igraph_0.7.1.tar.gz", repos=NULL, type="source")

結果は画像のようになりました。見方としては原点に近いほど特徴がなく、原点から赤字の方に離れているほどその人の特徴的な語です。 f:id:umaz1051:20161215193932p:plain 上の表と比べるとわかりやすいと思います。

6. それぞれの単語の出現回数

最後に出現回数の多い単語について誰が何回発言しているかを見ます。
ツール-文書-「文書×抽出語」表の出力-csvを選択し、集計単位をH1にして出力します。 出力されたファイルは横長で見づらいので表計算ソフトで行と列の入れ替えをすると良いでしょう。
できたものにsum列を追加し、合計値で並び替えると以下のようになりました

name おとくんのtweet ぼくのtweet kskのtweet 森のtweet sum
思う 26 27 46 45 144
x 73 45 18 3 139
行く 27 30 31 20 108
今日 18 24 23 29 94
寝る 13 14 23 36 86
感じ 28 17 14 21 80
見る 17 22 25 16 80
言う 14 14 26 24 78
明日 23 12 25 12 72
12 19 14 24 69
7 11 17 18 53
22 7 10 12 51
食べる 7 14 4 26 51
来る 8 21 16 5 50
起きる 10 9 14 16 49
入る 6 11 12 20 49
終わる 14 14 14 6 48
バイ 7 18 8 14 47
書く 11 16 12 8 47
痛い 12 17 0 18 47
飲む 4 24 4 13 45
レポート 10 1 17 16 44
気持ち 0 21 15 7 43
??? 20 3 2 18 43
帰る 10 8 13 12 43
8 18 5 11 42
時間 6 5 20 11 42
厳しい 4 16 9 13 42
11 7 8 13 39
忘れる 11 3 14 11 39
寒い 18 2 3 14 37
買う 14 6 10 6 36
自分 10 10 11 4 35
出る 7 6 10 12 35
食う 14 3 3 15 35
8 2 8 16 34
なんか 12 3 7 12 34
授業 11 8 4 10 33
眠い 14 5 6 8 33
面白い 12 8 8 2 30
持つ 5 6 10 8 29
8 10 5 6 29
先生 5 2 1 20 28
テスト 1 4 19 4 28
11 9 2 6 28
0 0 0 28 28
are 6 6 8 7 27
気づく 3 4 4 16 27
考える 10 9 4 4 27
死ぬ 5 9 9 4 27
入れる 5 7 9 6 27
良い 3 11 12 0 26
5 6 5 10 26
F4 10 6 9 0 25
昨日 8 7 5 5 25
最高 0 12 9 3 24
最近 11 4 6 3 24
作る 6 6 6 6 24
人生 1 20 2 0 23
あー 2 5 7 9 23
感じる 4 7 8 4 23
聞く 9 4 4 6 23
強い 11 7 4 1 23
多い 7 8 5 3 23
全然 5 0 10 7 22
E 11 7 4 0 22
居場所 0 7 14 0 21
写真 6 7 4 4 21
研究室 3 13 0 5 21
早い 3 5 10 3 21
8 3 0 10 21
取る 9 6 4 1 20
知る 6 2 7 5 20

おまけ

その一

大学に入学したぼくがJで語彙をなくし、klisで少し取り戻した様子(1期間あたり1780ツイート)*2

今日まで 16年8月まで 16年4月まで 15年12月まで 15年10月まで 15年6月まで 15年2月まで 14年6月まで
延べ単語数 15339 14899 13112 12621 13671 13396 13415 17862
1ツイートの平均文字数 16.53 15.61 13.86 13.19 14.33 13.93 13.93 19.62
名詞 2059 2019 1773 1550 1786 1625 1820 2183
動詞 449 456 428 413 441 443 427 440
未知語 306 243 198 234 239 219 249 332
副詞 129 138 136 139 113 132 134 157
形容詞 97 107 99 94 89 100 95 109
助詞 83 75 77 68 74 67 65 73
記号 39 30 24 27 29 29 33 83
接続詞 27 16 17 20 24 18 19 22
感動詞 23 33 33 31 27 30 24 32
接頭詞 20 20 10 14 29 20 18 15
助動詞 18 17 18 19 18 18 19 16
連体詞 15 12 10 10 15 17 12 19
フィラー 5 3 5 4 6 5 6 5
その他 1 1
出現単語数 3271 3169 2828 2623 2890 2723 2921 3487
その二おとくんの場合(12/16追記)
今日まで 16年8月まで 16年5月まで 15年11月まで 15年6月まで 15年2月まで 14年10月まで 14年7月まで
延べ単語数 40344 41316 34352 33465 33122 38033 39830 47087
1ツイートの平均文字数 18.72 19.04 15.96 15.44 15.48 17.83 18.4 21.7
名詞 3503 3571 3241 2917 2841 3264 3603 4131
動詞 762 725 684 679 641 701 712 774
未知語 486 458 445 480 830 783 636 540
副詞 259 238 221 213 212 206 231 286
形容詞 143 141 127 132 136 139 132 141
助詞 84 86 80 86 85 87 94 92
感動詞 58 53 51 59 51 60 59 62
記号 49 52 42 35 46 56 54 71
接頭詞 40 34 32 33 22 25 25 41
接続詞 35 33 32 32 33 35 36 41
助動詞 25 24 25 22 23 20 22 22
連体詞 19 21 18 16 19 18 21 21
フィラー 7 7 10 7 6 3 7 9
その他 1 1 1 1 1 1 1 1
出現単語数 5471 5444 5009 4712 4946 5398 5633 6232

少なくともJの期間ツイートが短くなるのは間違いなさそう

最後に

これを使おう textmining.userlocal.jp

*1:15総務局長,jsys局長,推進局長のこと、いろいろあって居場所をなくしてしまった3人組

*2:自分のツイートは公式から持ってこれる