CodeZine(コードジン)

特集ページ一覧

Zend Framework入門(19):
PHPによるテキスト検索エンジンの活用 - Zend_Search_Lucene -

Zend Frameworkによる実践的なPHPアプリケーション開発 19

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/05/15 14:00
目次

標準で利用できる文書解析メソッド

 Zend_Search_Luceneには文書を解析するためのメソッドがいくつか、あらかじめ組み込まれています。対象となるのはHTMLファイルとOffice 2007ドキュメントで、自動的に解析して、ヘッダ部分と本文に関するフィールドを作成します。

 なお、これらのメソッドは、デフォルトでは本文の内容を格納しないので注意してください。

 まずは、HTMLを解析するZend_Search_Lucene_Document_Htmlです。

HTML解析のためのメソッド(Zend_Search_Lucene_Document_Htmlクラス)
分類 メソッド 引数 説明
静的 loadHTML $data, $storeContent 文字列$dataをHTMLとして解析し、文書を作成する。$storeContentは本文を保存するかで、標準ではfalse。
loadHTMLFile $file, $storeContent 名前が$fileのファイルをHTMLとして解析し、文書を作成する。$storeContentは本文を保存するかで、標準ではfalse。
setExcludeNoFollowLinks $newValue relタグをリンクとして扱うかを指定する。
getExcludeNoFollowLinks (なし) relタグをリンクとして扱っているかを返す。
インスタンス getLinks (なし) リンク一覧を配列で返す。
getHeaderLinks (なし) ヘッダに含まれているリンクを配列で返す。
highlight $words, $color 単語$wordを色$colorでハイライトする。$colorは標準では '#66ffff'。
getHTML (なし) 元のHTMLデータを返す。

 なお、Zend_Search_Lucene_Document_Htmlを利用してHTMLファイルを解析した場合、$storeContentをtrueにしてloadHtmlを呼び出すと、作成される文書のbodyフィールドにはHTMLファイルからタグなどを取り除いたテキストが登録されます。解析前のHTMLファイルの内容はgetHTMLメソッドで取得できます(このメソッドは$storeContent=falseで作成した場合も利用可能です)。ただし、解析前のHTMLファイルの内容は索引に登録されないので、検索結果に対してはこのメソッドは使えないので注意してください。

 Office 2007ドキュメントも同様に解析のためのクラスが準備されています。Word 2007、Excel 2007、PowerPoint 2007用にそれぞれZend_Search_Lucene_Document_DocxFile、Zend_Search_Lucene_Document_XlsxFile、Zend_Search_Lucene_Document_PptxFileが準備されています。利用方法も同様に、静的メソッドを呼び出すことで解析を行います。

[リスト5]Word 2007ファイルの解析(docx.php)
<?php
require_once 'Zend/Search/Lucene.php';

//文字コードに関するおまじない(次回説明)
Zend_Search_Lucene_Analysis_Analyzer::setDefault(
    new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());

// (1) - 索引の読み込み
$index = Zend_Search_Lucene::open('codezine-index');

// (2) - 文書の作成
$doc = Zend_Search_Lucene_Document_Docx::loadDocxFile('test.docx');
//$doc = Zend_Search_Lucene_Document_Xlsx::loadXlsxFile('test.xlsx');
//$doc = Zend_Search_Lucene_Document_Pptx::loadPptxFile('test.pptx');

// (3) - 索引の追加
$index->addDocument($doc);
...

 リスト5の(2)のように、静的メソッドに解析したいファイルの名前を渡せば解析した結果がZend_Search_Luceneの文書として返されます。リスト5を実行した結果をリスト6に示します。

[リスト6]docx.phpを実行した出力
C:\codezine>php docx.php
score 0.26516504294496
title Test
filename:test.docx
title:Test
creator:Wings Project
description:
created:2009-02-16T08:21:00Z
modified:2009-02-16T08:50:00Z

 このように、HTMLファイルやOffice 2007のファイルは手間をかけずに解析することが可能です。

php_zip.dll

 Office 2007ドキュメントの解析にはZIP関係の機能をインストールする必要がありますが、Windows Installerで提供されるパッケージでPHPをインストールした場合にはこのZIP関係の機能が標準ではインストールされず、次のようなエラーが発生してしまいます。

PHP Fatal error:  Class 'Zend_Search_Lucene_Document_Docx' not found in C:\codezine\\test.php on line 10

 そのようなエラーが出た場合には改めてPHPのZIPで提供されているパッケージを入手し、そこにのextフォルダに含まれているphp_zip.dllを手でPHPのインストールされているフォルダのextフォルダにコピーしたうえでphp.iniに次の一行を加える必要があります:

extension=php_zip.dll

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Zend Framework入門

もっと読む

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

  • WINGSプロジェクト 風田 伸之(カゼタ ノブユキ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5