2010年12月9日木曜日

「PHPとMecabでキーワード自動リンクを実装する」をCentOS 5.5上でやってみた。その2

前回の続きで
続いて、独自の辞書ファイルを作る

辞書に必要なファイル群を作成していく。

まずurlのリストファイル。

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/

その他のファイルの中身は下記のように。
これらのファイルは末尾に改行があるとエラーになるので、入れないように。

matrix.def
1 1
0 0 0

char.def
-----------
DEFAULT 1 0 0
SPACE   0 1 0
0x0020 SPACE

unk.def
DEFAULT,0,0,0,*
SPACE,0,0,0,*

dicrc
cost-factor = 800
bos-feature = BOS/EOS
output-format-type=autolink

node-format-autolink = <a href="%H">%M</a>
unk-format-autolink = %M
eos-format-autolink = \n

ここまでできたら辞書をコンパイル。

$ /usr/libexec/mecab/mecab-dict-index -f utf-8 -c utf-8
./pos-id.def is not found. minimum setting is used
reading ./unk.def ... 2
emitting double-array: 100% |###########################################| 
./pos-id.def is not found. minimum setting is used
reading ./url.csv ... 4
emitting double-array: 100% |###########################################| 
reading ./matrix.def ... 1x1

done!

これで辞書ファイルができたので、コマンドラインから使ってみる。

$ mecab -d .
京都に行った
<a href="http://www.city.kyoto.jp/">京都</a>に行った

OK

つづいて、php_mecabから使ってみる。
sample.php
<?php
$options = array('-d', '上記辞書ファイルを作成したディレクトリへのパス');

$t = new MeCab_Tagger($options);
$str = '京都についてGoogleとYahooで検索した。';

print $t->parse($str);
?>

実行
$ php sample.php
<a href="http://www.city.kyoto.jp/">京都</a>について<a href="http://www.google.com/">Google</a>と<a href="http://www.yahoo.com/">Yahoo</a>で検索した。

OK

※追記
url.csvのスコアを求めるサンプル
<?php
$text = 'Yahoo';
$cost = (int)max(-36000, -400 * (pow(mb_strlen($text, 'UTF-8'), 1.5)));
print($cost);
?>
こんな感じで。