正規表現でキーワードリンクする

ruby-2.0.0-p0

正規表現を使ってキーワードリンクをやってみた。
動かす予定の環境のキーワード数は今のところ、400個くらいなので正規表現でまだ許容範囲だと思っている。
5000とかいったらtrieを使ってやるしかない感じっぽい。

def auto_word_link body
  words = Word.all.map{|v| Hash[v.name, v.id] }
  word_names = words.map{|v| v.keys}.flatten
  body.gsub(Regexp.union(word_names)){ "<a href=\"#{words.find{|v| v["#{$&}"]}.values.first }\">#{$&}</a>" }
end

ちなみに、はてなキーワードリンクは、単語数が少なかったときは正規表現で実装していたらしい。
今はアルゴリズムを使って実装しているとのこと。