Zend Framework入門(19):
PHPによるテキスト検索エンジンの活用 - Zend_Search_Lucene -
Zend Frameworkによる実践的なPHPアプリケーション開発 19
ダウンロード サンプルファイル (11.3 KB)
標準で利用できる文書解析メソッド
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
この記事は参考になりましたか?
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 風田 伸之(カゼタ ノブユキ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
