Rubyでもキーワード自動リンクを実装する
ウノウラボ by Zynga Japan: PHPとMecabでキーワード自動リンクを実装する
こちらの記事を参考に。
MeCab にはRuby バインディングも用意されているので
Ruby では以下のように記述することができる。
#!/usr/bin/ruby $KCODE='u' require 'MeCab' # autolink dictの位置は自分の環境にあわせて変更 m = MeCab::Tagger.new("-d /usr/local/lib/mecab/dic/autolink") str = '京都についてGoogleとYahooで検索した。' puts m.parse(str)
これだけではなんなので、少し悩んだところを。
ウノウラボ by Zynga Japan: PHPとMecabでキーワード自動リンクを実装する では
2. 自動リンク用辞書の作成 で以下のようなCSV を用意している。
Google,0,0,-5878,http://www.google.com/ Yahoo,0,0,-4472,http://www.yahoo.com/ ChaSen,0,0,-5878,http://chasen.org/ 京都,0,0,-3200,http://www.city.kyoto.jp/
独自辞書のためにCSV ファイルを作成する場合、
各項目(特に右から二番目)にどのような値を指定すればいいだろうか。
これはウノウラボ by Zynga Japan: PHPとMecabでキーワード自動リンクを実装する の参考リンクにあった
MeCab の辞書構造と汎用テキスト変換ツールとしての利用 にケーススタディとして解説されている。
* url.csv
単語としてキーワード, 品詞としてキーワードに対応する URL を書きます. 連接の状態は1状態で十分なので, 左文脈/右文脈IDともに 0 とします. コスト値は長いキーワードが優先されるよう設定します. 例えば以下のような関数を使うとよいでしょう.cost = (int)max(-36000, 400 * (length^1.5))url.csv
Google,0,0,-5878,http://www.google.com/ Yahoo,0,0,-4472,http://www.yahoo.com/ ChaSen,0,0,-5878,http://chasen.org/ 京都,0,0,-3200,http://www.city.kyoto.jp/
コストの算出はこんな感じで。
def cost(keyword) [-36000, -(400 * keyword.split(//).size ** 1.5).to_i].max end