2010年12月24日金曜日

phpでmemcachedを使う

環境はCentOS5.5です。

インストール
$ sudo yum -y install emcached
$ sudo pecl install memcache
Build process completed successfully
Installing '/usr/lib64/php/modules/memcache.so'
install ok: channel://pecl.php.net/memcache-2.2.6
configuration option "php_ini" is not set to php.ini location
You should add "extension=memcache.so" to php.ini


iniファイル作成
$ sudo vim /etc/php.d/memcache.ini
extension=memcache.so


立ち上げる
$ memcached -d -m 64 -p 11211

これで立ち上げます。

オプションの意味はこんな感じです。
-d :  デーモンモード
-m 64 : 64MBのメモリをストレージとして使用する
-p 11211 : 11211番ポートで待ち受ける


もしローカル環境からのアクセスのみ許可する場合はこう。
$ memcached -d -m 64 -p 11211 -l 127.0.0.1


とりあえず使ってみる。

<?php
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Can't connect");

// 'key' = "1" で保存。圧縮はなし。期限は30秒。
$memcache->set('key', "hogehoge", false, 30);
print($memcache->get('key'));  //  hogehoge
?>


ついでに、サービス起動されるように設定します。
$ sudo chkconfig memcached on

これで再起動してもmemcacheが自動的に起動されます。


参考
memcachedをインストールしphpから使用する - 適当な日々

PHPとMecab関連のリンクメモ

個人的なメモ。

MeCab の辞書構造と汎用テキスト変換ツールとしての利用
MeCab: 単語の追加方法

文章の中のはてなキーワードをハイライトさせる(1/7):CodeZine

ubuntu 7.10にmecab 0.97をインストール - たまに書くメモ
PHPからMecabを利用する拡張モジュール | Weboo! Returns.

FreeBSD(とLinux)雑記:明日のためにmecabをいれてみたw - livedoor Blog(ブログ)
2007-10-25 - やぎLabs

MeCab を使って文章の形態素解析をする PHP 用の拡張モジュールです。

CentOS 5.5 に形態素解析ライブラリMeCab 0.98を入れてみる - イノベートな非日常

PHP: プログラミング関係ごちゃごちゃメモ

PHPで都道府県、市区町村、町域名以降の住所分割を高速に行う方法 - 理想未来はどうなった?
IRCボットコンテストエントリ その一 ~めかぶで夏を乗り切ろう
MeCab PHP extension moduleを使ってみた
MeCabで形態素解析してみた【PHP】 - Programming Magic

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);
?>
こんな感じで。

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

phpでキーワードを自動リンクする必要がでてきた。

なので、

ウノウラボ Unoh Labs: PHPとMecabでキーワード自動リンクを実装する

こちらのエントリを参考にphpとMecabで実装してみる。

使用OSとバージョンは、CentOS 5.5


まずMecabを入れる


yumでためしにインストールしようとすると、
$ yum install mecab mecab-ipadic mecab-devel
....
Setting up Install Process
No package mecab available.
No package mecab-ipadic available.
No package mecab-devel available.
Nothing to do
となり、CentOS にはない。

なのでこのあたりの記事を参考に、ソースからビルドする。

文章の中のはてなキーワードをハイライトさせる(1/7):CodeZine
CentOSにmecabとphp_mecabをインストールする


$ tar xvzf mecab-0.98.tar.gz
$ cd mecab-0.98
$ ./configure --with-charset=utf8
$ make
$ sudo make install


なお、次のmecab-ipadicを入れるときに、こんなメッセージが出ちゃう。
error while loading shared libraries: libmecab.so.1: cannot open shared object file: No such file or directory

.soが読み込めてない。なので、

$ sudo vi /etc/ld.so.conf
--------------
/usr/local/lib # この一行を追加
--------------

$ sudo ldconfig

として、読み込み先を追加しておく。

で、mecab-ipadicを入れる。

$ tar xvzf mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801
$ ./configure --with-charset=utf-8
$ make
$ sudo make install

入ったら動作テスト

$ mecab
MeCabのインストール [Enter]
MeCab   名詞,固有名詞,組織,*,*,*,*
の      助詞,連体化,*,*,*,*,の,ノ,ノ
インストール    名詞,一般,*,*,*,*,インストール,インストール,インストール

ちゃんとうごいてる。

php_mecabをいれる

$ wget http://page2.xrea.jp/pub/php_mecab-0.2.0.tgz
$ tar xvzf php_mecab-0.2.0.tgz
$ cd php_mecab-0.2.0
$ phpize
$ ./configure --with-mecab=/usr/bin/mecab-config
$ make
$ sudo make install
Installing shared extensions:     /usr/lib64/php/modules/

.soを読み込ませる

$ sudo vim /etc/php.d/mecab.ini
--------------
extension=mecab.so       <---- 一行を追加して保存
--------------

apacheを再起動

$ sudo /etc/init.d/httpd restart

ロードされてるか確認

$ php -m | grep mecab
mecab

OK。続いて、独自の辞書ファイルを作る。長くなりそうなので。