: Ngramしてみた

なんとなくNgramを実装してみたくなったのでやってみた

#!/usr/bin/ruby                                                                 
require 'pp'
require 'open-uri'
$KCODE = 'u'
String.class_eval do
  def ngram(n)
    analyzed = Hash.new(0)
    self.split(//).each_cons(n) do |cons|
      next if cons.include?("\n")
      analyzed[cons.join('')] += 1
    end
    analyzed
  end

  def clear_tag
    self.gsub(/<[^>]+?>/, '')
  end
end

if $0 == __FILE__
  open(ARGV[0]) do |f|
    pp f.read.clear_tag.ngram(3).sort_by{|k, v| -v}
  end
end

使い方

引数にURLを指定するとそのページのタグを除去して解析する。
ちなみに「ハッカーになろう」を解析した上位はこんな感じ

$ ruby ngram.rb http://cruel.org/freeware/hacker.html
[["ッカー", 151],
 ["ハッカ", 144],
 ["です。", 121],
 ["ます。", 85],
 ["ません", 70],
 ["せん。", 56],
 ["ありま", 54],
 ["ること", 49],
 ["います", 47],
 ["しょう", 43],

ですます調で書かれているんだろうね。