人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

複数のキーワードが、ある文字列の中にそれぞれ何回含まれているかを調べる早い方法を教えてください。
下記のようなコードを書いたのですが、もっと綺麗、もっと早いと言った方法を教えてください。

文字列は100〜300kb程度、キーワードは数万件です。

また、PostgreSQLやMySQLを使う場合の綺麗で早い書き方もよろしければ教えてください。

(文字部分は例としてxxxxxとしております。)


$text = "xxxxxxxxxxxxxxxxxxxxxxxxxxx.....";
$keywords = array('xxxxx','xxxxx','xxxxx','xxxxx','xxxxx');
foreach($keywords as $keyword){
print "$keyword : " . substr_count($keyword,$text) . "?n";
}


よろしくお願いします。

●質問者: worldtravel
●カテゴリ:コンピュータ
✍キーワード:as keyword MySQL postgreSQL print
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ●
●35ポイント

書き方に特に問題はなく、PHPのみで速度を向上させることは難しいと思います。

本当にやりたいことがよく分からなかったので、以下の回答が的外れでしたらすみません。

(キーワードが数万件ありますと、おそらくほとんどのキーワードのカウントが0になりますよね。)

文章の解析を行いたいのでしたら、MeCabを使ってみてはいかがでしょうか。

php_mecabというPHP用のバインディングもあります。

MeCabの解析結果を元に処理を組み立てれば良いような気がします。

◎質問者からの返答

ありがとうございます。

ズバリMeCabの辞書に記載されているワードです。

ほとんどがカウント0になります。

が、供与レンタルサーバーでMeCabのインストールができません。

ですので辞書だけを使って何とかしたいなと考えていました。

となると無理矢理やるなら数十秒掛かってしまうんですかね...

残念です。

他に何か良い方法などありましたらアドバイス頂ければ幸いです。


2 ●
●35ポイント

回答ではないのですが、コメント欄が使えないため、こちらで失礼いたします。

そもそもMeCabの良いところは形態素解析できるところです。

substr_countを使ったやり方ではこれは出来ません(無条件に一致する文字列をカウント)が、それは問題ないのでしょうか。

辞書だけ使っても意味のある結果は出せないと思います。

凝ったことをやりたいのであれば、共用レンタルサーバからもう少し自由な環境(専用サーバ、VPS、自宅サーバ)などに移った方が良いと思います。

以下、思いついた方法を書いておきます。

  1. 上記のやり方で夜間などアクセスが少ない時間帯に解析を行い、結果を静的なHTMLで保存しておく
  2. ローカルPCなどの環境で解析した結果をアップロード

少しでも参考になれば幸いです。

◎質問者からの返答

ありがとうございます。

仰る「形態素解析」もやりたいのですが

やはりもう少し高いサーバーを借りないと難しいようですね。

ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ