それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

PHPで分かち書きするのに、mecabとか入れてられない。レンタルサーバーのPHPでもわかち書きモドキ

PHPってレンタルサーバで動くことが多いので、mecabモジュールなんて期待できない。
そこで考えた。もうセイキヒョウゲンでいいや。YahooのAPIも良いけれど、簡単なテストでそれは不要だろう。

正規表現でカタカナ・漢字・ひらがなに分割して分かち書きっぽいことする。

単語境界で区切るPHP

word_boundary.php
<?php
$str="これはテストです。動作するかなぁ"
preg_match_all('/[一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+/u', $str, $matches);
print_r($matches); // マッチ結果が全出力
出力結果
Array
(
    [0] => Array
        (
            [0] => これは
            [1] => テスト
            [2] => です
            [3] => 動作
            [4] => するかなぁ
        )

)

十分です。

カタカナだけ抜き出すなら。

word_KATAKANA.php
<?php
$str="これはテストです。動作するかなぁ";
preg_match_all('/[ァ-ヴー]+/u', $str, $matches);
print_r($matches); // マッチ結果が全出力
実行結果
Array
(
    [0] => Array
        (
            [0] => テスト
        )

)

ちゃんと最長のカタカナが取得できます。これで十分じゃないか。

漢字だけ抜き出す。

word_KANJI.php
<?php

<?php
$str="これはテストです。動作するかなぁ";
//preg_match_all('/[一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+/u', $str, $matches);
preg_match_all('/[一-龠]+/u', $str, $matches);
print_r($matches); // マッチ結果が全出力
結果
Array
(
    [0] => Array
        (
            [0] => 動作
        )

)

正規表現をなめてました。

これらは、正確に文字を抜き出す正規表現でないにしろ、十分です。タグを自動生成するのに十分すぎます。

mecab より未知語

未知語に対応しやすいんじゃないかと思う。人名とか。