PHP で N-gram を生成する
PHP 用の N-gram 生成ライブラリ、 php5-Text_Ngram を Github に公開しました。
個人的な PHP 5.3 の練習ということで作ったので、 namespace 等を使っています。 5.3 未満では動きません。
yuya-takeyama's php5-Text_Ngram at master - GitHub
プロダクションとしての利用は想定していませんので、利用者ご自身の責任においてご利用ください。
Text_Ngram
文字列を N-gram 形式に分割するためのライブラリです。
N-gram オブジェクトを生成し、配列のように扱うことができます。
動作環境
PHP5 (>= PHP 5.3)
インストール
Openpear 経由でインストールできます。
sudo pear channel-discover openpear.org sudo pear install openpear/Text_Ngram-beta
N-gram とは
例えば全文検索システムを構築する場合、前処理としてインデックスの作成が必要となります。
しかし、欧米の言語と違って、日本語はスペース等の一定のデリミタで区切ることはできません。
そこで、文章的な意味に関わらず、 n 文字ごとの分割した形式を使い、これを N-gram といいます。
分かち書きの方法としては、形態素解析も挙げられますが、 N-gram では辞書のメンテナンスが不要、という利点があります。
また、 n 文字ごとに分割する、という単純なルールなため、言語にかかわらず適用することができます。
使い方
N-gram オブジェクトの生成
require_once '/path/to/Text/Ngram.php'; use Text\Ngram; $ngram = new Ngram('こんにちは世界!', 2, 'UTF-8');
配列への変換
$ngramArray = $ngram->toArray();
N-gram オブジェクトを配列の要に扱う
echo $ngram[0]; // => こん echo $ngram[1]; // => んに echo count($ngram); // => 7
イテレーション
foreach ($ngram as $key => $value) { echo "{$key} : {$value}" . PHP_EOL; }
まとめ
初めにも書きましたが、あくまでも利用者ご自身の責任においてご利用ください。
Pure PHP なので、速くないと思います。
機能も最小限ですが、小規模なサービスでは問題なく使えるとおもいます。
テストはしている & 書いていますが、バグ等見つけたら、フィードバックいただけるとありがたいです。