自主的20%るぅる

各々が自主的に好き勝手書くゆるふわ会社ブログ

会社ブログと社長ブログの「頻出語」ってなんだろう?【Agent Grow Advent Calendar 2017:20日目】

頻出語を探せ!

この記事は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のデータを対象にしてみる……ってのも面白いかも……。

……ということで、今回はこの辺で!明日の記事もお楽しみに!

注訳はこちら

注訳はこちら
1 この記事で使ったデータは2017年11月30日までの記事だけを対象にしましたので、
私が実際に使ったSQLはもうちょっと複雑なものでした
2 Based on “Python (written by hideaki-t & overlast)”
Let’s share this article!

{ 関連記事 }

{ この記事を書いた人 }

アバター画像
Yuta Hayakawa

2016年6月入社。2020年12月より取締役に就任しました。

普段は東京本社で管理職のお仕事したり、広報的役割としてテキスト書いたり動画作ったりするのが最近のお仕事。

自称「社内システムチーム統括」として、社内システムチームの面々を見守りつつ毎日を過ごしています。

プライベート面では、音楽やコンピュータ関連、ゴルハム&ジャンハム関係、ゲーム関係が興味あるポイント。

あと、我が子可愛い。

記事一覧