SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Zend Framework入門

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

 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

次のページ
検索の行い方

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Zend Framework入門連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3867 2009/05/15 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング