標準で利用できる文書解析メソッド
Zend_Search_Luceneには文書を解析するためのメソッドがいくつか、あらかじめ組み込まれています。対象となるのはHTMLファイルとOffice 2007ドキュメントで、自動的に解析して、ヘッダ部分と本文に関するフィールドを作成します。
なお、これらのメソッドは、デフォルトでは本文の内容を格納しないので注意してください。
まずは、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が準備されています。利用方法も同様に、静的メソッドを呼び出すことで解析を行います。
<?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に示します。
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のファイルは手間をかけずに解析することが可能です。
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