85
82

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 5 years have passed since last update.

mecabをRubyで使う

Posted at

前に書いた、Macにmecabインストールの続きのメモ。

  • 辞書にはてなキーワード追加
  • mecabをRubyで使う

こちらをやる。

辞書にはてなキーワード追加

まえにwikipediaのタイトルを辞書に追加したが、同じ要領で。

はてなキーワードのリスト取得

$ wget http://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv

hatena_keywordlist_furigana.csvとかにリネームしとく。

辞書用のCSVにフォーマットを変更

store_wikipedia_and_hatena_to_csv
require 'kconv'

origin =
  if $*[0] =~ /wiki/
    "wikipedia"
  elsif $*[0] =~ /hatena/
    "hatena"
  else
    "unknown"
  end

open($*[0]).each do |title|
  if origin == "wikipedia"
    title.strip!
  elsif origin == "hatena"
    title = title.toutf8
    title = title.split("\t")[1].strip
  end

  next if title =~ /^\./
  next if title =~ /,/
  next if title =~ /[0-9]{4}/
  next if title =~ /^[-.0-9]+$/

  title_length = title.split(//u).length
  score = [-36000.0, -400 * (title_length ** 1.5)].max.to_i

  if title_length > 3
    print "#{title},0,0,#{score},名詞,固有名詞,*,*,*,*,#{title},*,*,#{origin},\n"
  end
end

こんな感じのスクリプトを利用し、辞書用CSVを生成。

$ ruby store_wikipedia_and_hatena_to_csv hatena_keywordlist_furigana.csv | nkf -e > hatena_keyword.csv

辞書構築

/usr/local/Cellar/mecab/0.996/lib/mecab/dic/ipadic/下にhatena_keyword.csvを移し、

$ cd /usr/local/Cellar/mecab/0.996/lib/mecab/dic/ipadic/
$ /usr/local/Cellar/mecab/0.996/libexec/mecab/mecab-dict-index -f euc-jp -t utf-8

※mecabはMacにhomebrewで入れたやつ

これで、wikipediaタイトル+はてなキーワードを辞書として利用できる。

Rubyから利用

nattoというgemを使ってRuby(Rails)からmecab利用。

Gemfile
gem 'natto'
$ bundle

適当なメソッドを書く。

文章の配列を引数にとり、それらを形態素解析。wikipediaタイトル or はてなキーワードに合致した単語とその出現頻度を計算し、ハッシュで表示するようなロジック。

keyword_analysis.rb
class KeywordAnalysis
  def self.morphological_analysis(words)
    result = {}
    natto_mecab = Natto::MeCab.new

    words.each do |word|
      natto_mecab.parse(word) do |n|
        next if n.feature.split(",")[-1] !~ /wikipedia|hatena/

        if result["#{n.surface}"]
          result["#{n.surface}"] += 1
        else
          result["#{n.surface}"] = 1
        end
      end
    end

    return result
  end
end

コンソールで実行

> texts = ["泣いてもいいんだよ/ももいろクローバーZ(NAITEMO IINDAYO)", "ももいろクローバーZ「GOUNN」MV", "ももいろクローバーZ「サラバ、愛しき悲しみたちよ」MV"]
> KeywordAnalysis.morphological_analysis(texts)
=> {"ももいろクローバーZ"=>3, "GOUNN"=>1, "サラバ、愛しき悲しみたちよ"=>1}

こんな感じで、Rubyから簡単にmecabを利用することができた。
twitterの全ツイートとかはてブしたリンクとかをこれで解析したら、自分の嗜好とかが単語から読み取れるかもしれない。

85
82
0

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
85
82

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?