0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MeCabで形態素解析してみた

Last updated at Posted at 2020-06-13

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を使っているようです)。

追記(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
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?