リスト1●プログラムのコード(PHP)
リスト1●プログラムのコード(PHP)
[画像のクリックで拡大表示]
図1●日経ソフトウエアのサイト「雑誌の紹介」のページのテキスト・ファイル
図1●日経ソフトウエアのサイト「雑誌の紹介」のページのテキスト・ファイル
[画像のクリックで拡大表示]
図2●サンプルはコマンドラインから起動
図2●サンプルはコマンドラインから起動
[画像のクリックで拡大表示]
図3●図1のテキスト・ファイルからリンク付きのHTMLファイルを自動生成した
図3●図1のテキスト・ファイルからリンク付きのHTMLファイルを自動生成した
[画像のクリックで拡大表示]
レシピ
■ PHP 4.xまたは5.x
http://www.php.net/
■ PHP標準添付のmbstringモジュール

 IT業界には,次から次へと新語や造語が登場します。しかし,わからない言葉を検索エンジンで確認するとき,ドキュメントから検索フォームにいちいち単語をコピー&ペーストする作業は面倒です。そこでドキュメントを読み込ませると,キーワードに自動的に検索エンジンへのリンクを張ったHTML文書を生成するスクリプトを作ってみました。

 今回のサンプルはPHP(PHP:Hypertext Preprocessor)を使用します。バージョンは4.xでも5.xでもかまいません。デフォルト設定でインストールされている(C:\PHP にインストール済)としてお話を進めさせてください。

 PHPというと「Webアプリケーション開発の専用言語」と思い込んでいる方がいるかもしれません。しかし,実際にはコマンドラインで使用するスクリプト言語環境です。ですから,ApacheのようなWebサーバーもMySQLのようなデータベースも使わず,純粋にスクリプト言語として,コマンドラインでPHPを動かせます。

 ちなみにこのPHPへの誤解は,Web開発に多用されるPerlも同様でしょう。Perlはコマンドライン・スクリプト言語と認識されていた時代のほうが長いのですが,最近だと「PerlはWeb専用」と思っている人は案外います。

PHPのmbstringを使う

 今回のサンプルの処理は,テキスト・ファイルの読み込み→アルファベットの文字列を抽出してリンク付け→新たにテキスト・ファイル(HTML)を生成,という流れになります。調べたいキーワードは何でもかんでもというわけにもいかないので,アルファベットにしぼります。とりあえずファイル生成付きパイプ・プログラムとでも呼んでおきましょう。

 プログラム内では,読み込んだテキスト・ファイル内にあるアルファベットの単語をHTMLの<a>タグでくくります。<a>タグはリンク付けをするためのタグです。リンク先は検索エンジンの定番Googleです。リンクの際に抽出した英単語を検索語句として渡し,クリックするとその語句をキーワードとした検索結果のページが出てくるという仕様になっています。なお,新たに生成するHTMLは非常に簡単なもので,タグの書き方などはW3Cの勧告に従ってはいません。目的はあくまで文中の英単語に対して検索リンクを付けることで,完全にHTML化することではありませんからね。

 Googleを使って,キーワード検索するには

http://www.google.co.jp/search?hl=ja&q=検索語句&ie=Shift_JIS
という書式を使います。「q=」の後ろに検索語句を入れます。本サンプルはWindowsでの使用を前提とし,カタカナも抽出するといった拡張を考えて「ie=Shift_JIS」のように文字コードにシフトJISを指定しています。「ie=」というくらいなのでInternet Explorer限定かのように見えますが,Firefoxでも問題なく検索できます。

 キーワードの抽出には正規表現を使います。日本語を処理するので,PHPのマルチバイト文字列関数mbstringモジュールが動くように設定してください。php.iniなどいくつか細かい設定が必要です(詳しくはhttp://www.php.net/manual/ja/ref.mbstring.phpを参照してください)。サンプル・コード(リスト1[拡大表示])は,C:\Sampleというフォルダ(ディレクトリ)を作成し,text2html.phpの名前で保存してください。

<?php
$exec_path = "C:\Sample";
$src_file = "\src.txt";
$dist_file = "\dist.html";

$filename = $exec_path.$src_file;
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);

$rec_str = ""; //HTMLに記録するテキストの生成
$link_buf = ""; //検索語句になる部分用の一時バッファ
$flag = 0; //検索語句感知状態フラグ
$max = mb_strlen($contents,"sjis");

for($i=0;$i<=$max;$i++){
    $one_str = mb_substr ($contents,$i ,1,"sjis");
    $chk_eng = preg_match('/^[a-z0-9\.\s]/i', $one_str);

    if($chk_eng && !$flag){
        $link_buf = $one_note;
        $flag = 1;
    }
    //英単語記録モード中
    if($flag){
        if($chk_eng){
            $link_buf = $link_buf.$one_str;
        }
        if(!$chk_eng){
            $flag = 0;
            $tag_str = "<a
href='http://www.google.co.jp/search?hl=ja&q=".$link_buf."&ie=Shift_JIS'>";
            $link_buf = $tag_str.$link_buf."</a>";

            $rec_str = $rec_str.$link_buf;
            $rec_str = $rec_str.$one_str;
        }
    }else{
        $rec_str = $rec_str.$one_str;
    }
}

$rec_str = nl2br($rec_str);
$filename = $exec_path.$dist_file;
$handle = fopen($filename, 'w');
fwrite($handle, $rec_str);
fclose($handle);
?>

 使い方です。処理したい元ネタのテキスト・ファイルをC:\Sampleに「src.txt」という名前で保存します(図1[拡大表示])。[スタート]→[アクセサリ]→[コマンドプロンプト]とたどってコマンドプロンプトを起動し,

C:\PHP\PHP C:\sample\text2html.php
と打ち込んでリターンキーを押すと処理が開始され(図2[拡大表示]),C:\Sampleに「dist.html」が生成されます。エクスプローラでC:\Sampleを開いてdist.htmlをダブルクリックするとWebブラウザが起動して簡易HTMLが表示されます(図3[拡大表示])。調べたい語句のリンクをクリックすればGoogleの検索結果が出ます。

 日記のテキスト・ファイルをこのプログラムを通してHTMLとして生成し自分のブログに貼り付ければ,簡易検索機能付きブログの誕生です。いちいち自前でリンクを張るのは面倒な作業ですが,こういう仕組みを持っていると労力を低減できますよ。