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