Ubuntu(bionic)上で、Ruby(mecabジェム)を使って形態素解析を実行してみるところまでの手順です。
まずはインストール。
apt install mecab mecab-ipadic-utf8 libmecab-dev
gem install mecab
以下のプログラムで解析結果を出力してみてみることが出来ます。
require 'mecab'
tagger = MeCab::Tagger.new
puts tagger.parse(open('sample.txt').read)
出力結果の文字列(String)をパースして、単語の出現回数順に表示するサンプルです。
require 'mecab'
tagger = MeCab::Tagger.new
t = tagger.parse(open('sample.txt').read)
words = {}
t.split("\n").each do |l|
w = l.split("\t")[0]
c = words[w] || 0
c += 1
words[w] = c
end
words.sort {|a,b| a[1] <=> b[1]}.each do |v|
puts v[0]+"\t"+v[1].to_s
end
この例では品詞などを考慮していないので、「、。(句読点)」なども含まれてしまいます。目的に応じてフィルタリングなどが必要かと思います。
nattoというgemもあるようで、これらの力を借りるのも手かもしれません。また、もっと専門的な分析手法を手軽に試したい、ビジュアライズ(グラフ化)なども、という場合は KH Coder というフリーソフトが役に立つかもしれません(内部でやはりMeCabを使っているようです)。
- 参考: mecabを使ってみた
追記(20.06.13) コメント欄で頂いたアドバイスに従って、コードを改良してみました。Ubuntu(bionic-beaver)の標準で入っているRubyのバージョンが 2.5.1p57
でしたので、tally以外を採用した形です。
require 'mecab'
tagger = MeCab::Tagger.new
t = tagger.parse(IO.read('sample.txt'))
words = Hash.new(0)
t.split("\n").each do |l|
w = l.split("\t")[0]
words[w] += 1
end
words.sort_by {|a| a[1]}.each do |w,f|
puts "%4d %s" % [f,w]
end