動かざることバグの如し

近づきたいよ 君の理想に

いろんな業界の企業紹介文に出てくる頻出ワードを集計してみた

用意するもの

ソフトウェア・情報処理

システム,818
開発,707
事業,367
サービス,364
企業,354
技術,302
提供,300
お客様,270
IT,263
情報,198

情報(通信・マスコミ)

事業,441
企業,272
広告,241
制作,222
会社,220
情報,199
サービス,178
企画,159
年,153
たち,148

金融・証券・保険

事業,574
保険,355
お客様,315
サービス,294
企業,276
金融,272
販売,264
提供,244
業務,232
会社,230

商社

事業,467
販売,393
展開,232
お客様,226
企業,214
たち,187
提供,181
私,180
商品,175
開発,174

まぁだからなんだよって話だけど

リクナビに自動ログイン

UA偽装は不要かもだけど念の為。

agent = Mechanize.new
agent.user_agent_alias = 'Linux Firefox'
USER = 'oppai'
PASS = '114514'
agent.get("https://job.rikunabi.com/2016/auth/topLoginform/") do |login_page|
    login_page.form_with(name: 'auth_indexActionForm') do |login|
        login['rikunabiCd'] = USER
        login['password'] = PASS
    end.click_button
end

企業の紹介文をすっぱ抜く

自動で最後までのページ取得してもいいけど即興なので6までと指定してあげる

取得したデータは適当にMySQLにでも保存

1.upto(6) do |i|
    agent.get("https://job.rikunabi.com/2016/s/6________/?moduleCd=100&kdb=BB&pn=#{i}") do |page|
        html = Nokogiri::HTML(page.body)
        html.css('.g_search_cst_cnt').each do |corp|
            name = corp.css('p b a').text
            text = corp.css('.g_lnk_noline').text.gsub(/続きを読む/, "")
            Corp.create(
                name: name,
                text: text
            )
        end
    end
end

頻出度を調べる

文章の形態素解析にはMecab&Nattoを利用 名詞のみ対象にして配列に集計していく

nm = Natto::MeCab.new
words_map = {}

Corp.all.each do |c|
    nm.parse(c.text) do |n|
        feature = n.feature.split(',')
        surface = n.surface
        next if feature.first != "名詞"
        words_map[surface] ||= 0
        words_map[surface] += 1
    end
end
words_map = words_map.sort_by {|k, v| -v}

あとはCSVなりデータベースに打ち込めばおk

以下全文

require 'bundler'
Bundler.require

ActiveRecord::Base.configurations = YAML.load_file('database.yml')
ActiveRecord::Base.establish_connection(:development)
class Corp < ActiveRecord::Base
end
agent = Mechanize.new
agent.user_agent_alias = 'Linux Firefox'
USER = 'oppai'
PASS = '114514'
agent.get("https://job.rikunabi.com/2016/auth/topLoginform/") do |login_page|
    login_page.form_with(name: 'auth_indexActionForm') do |login|
        login['rikunabiCd'] = USER
        login['password'] = PASS
    end.click_button
end
1.upto(6) do |i|
    agent.get("https://job.rikunabi.com/2016/s/6________/?moduleCd=100&kdb=BB&pn=#{i}") do |page|
        html = Nokogiri::HTML(page.body)
        html.css('.g_search_cst_cnt').each do |corp|
            name = corp.css('p b a').text
            text = corp.css('.g_lnk_noline').text.gsub(/続きを読む/, "")
            Corp.create(
                name: name,
                text: text
            )
        end
    end
end
require 'bundler'
Bundler.require

ActiveRecord::Base.configurations = YAML.load_file('database.yml')
ActiveRecord::Base.establish_connection(:development)
class Corp < ActiveRecord::Base
end
nm = Natto::MeCab.new
words_map = {}

Corp.all.each do |c|
    nm.parse(c.text) do |n|
        feature = n.feature.split(',') #名詞,一般,*,*,*,*,単語,タンゴ,タンゴ
        surface = n.surface
        next if feature.first != "名詞"
        words_map[surface] ||= 0
        words_map[surface] += 1
    end
end
words_map = words_map.sort_by {|k, v| -v}
File.open('/tmp/t.csv','w'){|f|
    words_map.each do |word, count|
        f.write "#{word},#{count}\n"
    end
}

Gemfile

source "https://rubygems.org"
gem "nokogiri"
gem "mechanize"
gem "activerecord", :require => 'active_record'
gem "mysql2"
gem "natto"