頻出語を探せ!
この記事はAgent Grow Advent Calendar 2017の記事です。
設立当初からいろいろな情報を発信しているこの会社ブログ、そして社長ブログ。
だいぶ記事数もアクセス数も増えてきて、イイ感じですΣd(ゝ∀・)ネッ!!!
そんな会社ブログと社長ブログの記事を眺めていて、
社長ブログと会社ブログの頻出語って何だろう?(´・ω・`)
……という疑問がふと湧いてきました。
そこで今回は、「各ブログの頻出後」について調べてみようと思います!
なお「頻出語」を無条件で抽出すると、かなりカオスな結果が得られそうな気配がするので……。今回はMecabが「固有名詞」と判断したものだけを対象にしてみようと思います。
まずはOSを整える!
では、解析に必要な環境を作りましょう。
まず、どのご家庭にもあるMinimalなISOからインストールした直後のCentOS7を用意します。
SSHでログインして、「最新アップデートの適用」と「不足パッケージの追加」をやりましょう。
$ sudo yum update -y (略) $ sudo yum install -y wget gcc-c++ git patch php epel-release python34 (略) $ cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
Mecabさんが使えるようにする!
続いて、今回の要となるMecabさんをインストールします。
$ cd ~ $ wget 'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE' -O mecab-0.996.tar.gz (略) $ tar xzf ./mecab-0.996.tar.gz $ cd mecab-0.996 $ ./configure (略) $ make && make check && sudo make install (略) $ which mecab /usr/local/bin/mecab
これだけではMecabさんは機能しないので、IPA辞書をインストールします。
$ cd ~ $ wget 'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM' -O mecab-ipadic.tar.gz (略) $ tar xzf ./mecab-ipadic.tar.gz $ cd ./mecab-ipadic-2.7.0-20070801 $ ./configure --with-charset=utf8 (略) $ make && sudo make install (略)
標準のIPA辞書だけだとナウいワードとかをちゃんと検知できない可能性があるので……。
mecab-ipadic-NEologdってヤツをインストールしてみます。
インストールの途中で目視チェック&インストールするかの確認をされる(下記、[install-mecab-ipadic-NEologd]〜のところ)ので、問題なさそうなら「yes」と入力してエンターキーを勢いよく押下しましょう。
$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git (略) $ cd mecab-ipadic-neologd/ $ ./bin/install-mecab-ipadic-neologd -n (略) [install-mecab-ipadic-NEologd] : Do you want to install mecab-ipadic-NEologd? Type yes or no. yes (略)
WordPressの本文データを抽出する!
それでは頻出語を調べる対象となるデータを抽出しましょう。ブログの本文あたりがちょうどよさげですね。
会社ブログと社長ブログはみんな大好きWordpressで運営しているので、下記のサイトを参考に本文データを抜き出します。
SQL的には下記のような感じになるかと思われます。1)この記事で使ったデータは2017年11月30日までの記事だけを対象にしましたので、
私が実際に使ったSQLはもうちょっと複雑なものでした
SELECT post_content FROM wp_posts WHERE post_status = 'publish' AND post_type = 'post'
抽出データを正規化する!
抜き出したデータはそのまま使わずに、正規化した方がいいらしいです。
「解析前に行うことが望ましい文字列の正規化処理 – neologd/mecab-ipadic-neologd」にPythonのコードがあるのでありがたく使わせていただきましょう。
……と思ったのですが、この後の解析で標準入出力を使ってゴニョゴニョしたいので……。そういう使い方ができるように、ちょっとだけ元のソースから書き換えてみました。
使いたい人いるか知りませんが、ボクのGistに載っけておきました。2)Based on “Python (written by hideaki-t & overlast)”
ちなみにボクが正規化した時は、こんな感じでやりました。
$ cat ./source_agp.txt | php -r 'echo strip_tags(implode("", file("php://stdin", FILE_SKIP_EMPTY_LINES)));' | python3 ./normalize_neologd_filter.py > ./source_agp_filtered.txt $ cat ./source_self20percent.txt | php -r 'echo strip_tags(implode("", file("php://stdin", FILE_SKIP_EMPTY_LINES)));' | python3 ./normalize_neologd_filter.py > ./source_self20percent_filtered.txt
- 「source_agp.txt」:社長ブログの元データ
- 「source_agp_filtered.txt」:社長ブログの正規化後データ
- 「source_self20percent.txt」:会社ブログの元データ
- 「source_self20percent_filtered.txt」:会社ブログの正規化後データ
なお、間にPHPのワンライナーが入ってますが、「ワタシハPythonチットモデキナイ」ってこともあって、慣れ親しんだPHPを使わせていただいたってアレです(´・ω・`)
早速調べてみよう!
ここまで準備ができたら、後はMecabさんにお願いしてゴニョゴニョするだけですね。
今回は各ブログごとに「ベスト20」まで出してみましょう。
今回は下記のようなコマンドでアレしてみました。
$ cat ./source_agp_filtered.txt | mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd/ | grep "固有名詞"|awk '{print $1,$2;}' | sort | uniq -c | sort -nr | head -20 (略) $ cat ./source_self20percent_filtered.txt | mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd/ | grep "固有名詞"|awk '{print $1,$2;}' | sort | uniq -c | sort -nr | head -20 (略)
気になる結果は……!?
それでは結果を見てみましょう!
さすがにそのままだと見づらいので、ちょっと見やすいようにしてみました(‘-‘*)
社長ブログ
まずは社長ブログから!
経営者らしいワード……といえばいいのでしょうか、それっぽいワードが並んでいますね。
回数 | ワード | 参考:Mecabさんの出力 |
---|---|---|
167 | 従業員 | 名詞,固有名詞,一般,*,*,*,従業員,ジュウギョウイン,ジューギョーイン |
99 | …。 | 名詞,固有名詞,人名,一般,*,*,…。,サイレンス,サイレンス |
92 | 経営者 | 名詞,固有名詞,一般,*,*,*,経営者,ケイエイシャ,ケイエイシャ |
55 | 私たち | 名詞,固有名詞,一般,*,*,*,私たち,ワタシタチ,ワタシタチ |
48 | 管理職 | 名詞,固有名詞,一般,*,*,*,管理職,カンリショク,カンリショク |
47 | IT | 名詞,固有名詞,一般,*,*,*,IT,アイティー,アイティー |
40 | 人財 | 名詞,固有名詞,一般,*,*,*,人財,ジンザイ,ジンザイ |
37 | 労働環境 | 名詞,固有名詞,一般,*,*,*,労働環境,ロウドウカンキョウ,ロードーカンキョー |
33 | 中小企業 | 名詞,固有名詞,一般,*,*,*,中小企業,チュウショウキギョウ,チューショーキギョー |
31 | via | 名詞,固有名詞,一般,*,*,*,VIA,ビア,ビア |
31 | kwout | 名詞,固有名詞,一般,*,*,*,kwout,クォート,クォート |
30 | 私自身 | 名詞,固有名詞,一般,*,*,*,私自身,ワタシジシン,ワタシジシン |
25 | エージェントグロー | 名詞,固有名詞,組織,*,*,*,* |
24 | 社長ブログ | 名詞,固有名詞,一般,*,*,*,社長ブログ,シャチョウブログ,シャチョーブログ |
23 | 求職者 | 名詞,固有名詞,一般,*,*,*,求職者,キュウショクシャ,キューショクシャ |
19 | 自社 | 名詞,固有名詞,組織,*,*,*,自社,ジシャ,ジシャ |
19 | 応募者 | 名詞,固有名詞,一般,*,*,*,応募者,オウボシャ,オーボシャ |
19 | グループ会社 | 名詞,固有名詞,一般,*,*,*,グループ会社,グループカイシャ,グループカイシャ |
18 | 2017年 | 名詞,固有名詞,一般,*,*,*,2017年,ニセンジュウナナネン,ニセンジュウナナネン |
17 | SES | 名詞,固有名詞,一般,*,*,*,SES,エスイーエス,エスイーエス |
会社ブログ
続いて会社ブログ!
技術系のワードや顔文字の構成部品らしいワードが多いですね。
回数 | ワード | 参考:Mecabさんの出力 |
---|---|---|
389 | php | 名詞,固有名詞,一般,*,*,*,PHP,ピーエイチピー,ピーエイチピー |
343 | nbsp | 名詞,固有名詞,組織,*,*,*,* |
252 | …。 | 名詞,固有名詞,人名,一般,*,*,…。,サイレンス,サイレンス |
212 | bash | 名詞,固有名詞,一般,*,*,*,bash,バッシュ,バッシュ |
201 | o | 名詞,固有名詞,組織,*,*,*,* |
183 | ω | 名詞,固有名詞,一般,*,*,*,ω,オメガ,オメガ |
174 | 福岡 | 名詞,固有名詞,地域,一般,*,*,福岡,フクオカ,フクオカ |
172 | x86 | 名詞,固有名詞,一般,*,*,*,x86,エックスハチロク,エックスハチロク |
157 | centos | 名詞,固有名詞,一般,*,*,*,CentOS,セントオーエス,セントオーエス |
156 | PHP | 名詞,固有名詞,一般,*,*,*,PHP,ピーエイチピー,ピーエイチピー |
142 | quot | 名詞,固有名詞,組織,*,*,*,* |
136 | rpi | 名詞,固有名詞,組織,*,*,*,* |
128 | for | 名詞,固有名詞,一般,*,*,*,for,フォー,フォー |
125 | via | 名詞,固有名詞,一般,*,*,*,VIA,ビア,ビア |
125 | kwout | 名詞,固有名詞,一般,*,*,*,kwout,クォート,クォート |
116 | アレ | 名詞,固有名詞,一般,*,*,*,are,アレ,アレ |
115 | pecl | 名詞,固有名詞,一般,*,*,*,PECL,ピクル,ピクル |
111 | gt | 名詞,固有名詞,一般,*,*,*,GT,ジーティ,ジーティ |
109 | code | 名詞,固有名詞,一般,*,*,*,code,コード,コード |
99 | user | 名詞,固有名詞,組織,*,*,*,* |
わーい(≧▽≦)たーのしー(o´∀`o)
本当に意図したとおりのデータが得られているのか不安ではあるのですが……それは一旦忘れることとして……。
いろいろノイズが混じってたりするのでアレではありますが、まあそこそこ興味深いデータがゲットできたんじゃないかなーって思います(‘-‘*)
WordPressの本文データだけじゃなくて、例えばタイトルだけを対象にしてみたりするとまた違った結果が得られそうですね。社内で使っているSlackのデータを対象にしてみる……ってのも面白いかも……。
……ということで、今回はこの辺で!明日の記事もお楽しみに!