/[hyperestraier]/trunk/doc/uguide-ja.html
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/doc/uguide-ja.html

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (hide annotations)
Fri Jul 29 21:56:53 2005 UTC (18 years, 10 months ago) by dpavlin
Original Path: upstream/0.5.1/doc/uguide-ja.html
File MIME type: text/html
File size: 80152 byte(s)
import of HyperEstraier 0.5.1

1 dpavlin 2 <?xml version="1.0" encoding="UTF-8"?>
2    
3     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4    
5     <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
6    
7     <head>
8     <meta http-equiv="Content-Language" content="ja" />
9     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
10     <meta http-equiv="Content-Style-Type" content="text/css" />
11     <meta name="author" content="Mikio Hirabayashi" />
12     <meta name="keywords" content="Hyper Estraier, Estraier, full-text search, API" />
13     <meta name="description" content="User's Guide of Hyper Estraier" />
14     <link rel="contents" href="./" />
15     <link rel="alternate" href="uguide-en.html" hreflang="en" title="the English version" />
16     <link rel="stylesheet" href="common.css" />
17     <link rel="icon" href="icon16.png" />
18     <link rev="made" href="mailto:mikio@users.sourceforge.net" />
19     <title>User's Guide of Hyper Estraier Version 1 (Japanese)</title>
20     </head>
21    
22     <body>
23    
24     <h1>ユーザガイド</h1>
25    
26     <div class="note">Copyright (C) 2004-2005 Mikio Hirabayashi</div>
27     <div class="note">Last Update: Tue, 07 Jun 2005 06:17:00 +0900</div>
28     <div class="navi">[<a href="uguide-en.html" hreflang="en">English</a>] [<a href="index.ja.html">HOME</a>]</div>
29    
30     <hr />
31    
32     <h2 id="tableofcontents">目次</h2>
33    
34     <ol>
35     <li><a href="#introduction">はじめに</a></li>
36     <li><a href="#attributes">文書の属性</a></li>
37     <li><a href="#formats">ファイル形式</a></li>
38     <li><a href="#searchcond">検索条件式</a></li>
39     <li><a href="#wordextraction">検索語の抽出</a></li>
40     <li><a href="#estcmd">管理用コマンド</a></li>
41     <li><a href="#estseek">検索用CGIスクリプト</a></li>
42     <li><a href="#tips">助言</a></li>
43     <li><a href="#faq">よく聞かれる質問</a></li>
44     </ol>
45    
46     <hr />
47    
48     <h2 id="introduction">はじめに</h2>
49    
50     <p>この文書では、Hyper Estraierのアプリケーションの詳細な使い方を説明します。<a href="intro-ja.html">イントロダクション</a>をまだお読みでない場合は、先にそちらに目を通しておいてください。</p>
51    
52     <p>Hyper Estraierは、いわゆるインデックス型の検索システムです。検索を行う前に、対象文書の情報を登録したインデックスを準備しておく必要があります。その手間がかかるかわりに、とても高速に検索を行うことができます。Hyper Estraierはインデックスを管理するコマンド「estcmd」とインデックスを使って検索を行うCGIスクリプト「estseek.cgi」からなります。つまり、コマンドラインでインデックスの管理作業を行い、Webブラウザで検索を行うことになります。</p>
53    
54     <p>estcmdは様々な形式の文書を扱うことができ、またインデックスに対する多様な管理操作を行うことができます。この文書では、文書の扱われ方やインデックスの管理方法について詳細に説明します。</p>
55    
56     <p>Hyper Estraierは様々な検索方法をサポートします。複数の検索語を組み合わせたり、文書の属性を使って検索したりすることができます。また、estseek.cgiの設定により、表示方法をカスタマイズすることができます。この文書ではそれらの方法についても説明します。</p>
57    
58     <hr />
59    
60     <h2 id="attributes">文書の属性</h2>
61    
62     <p>Hyper Estraierが扱う文書には、本文の情報だけでなく、タイトルなどの属性情報をつけることができます。属性は様々な応用ができます。属性を使った検索もできますし、更新日時の属性は差分更新の判断にも使われます。</p>
63    
64     <h3>属性名</h3>
65    
66     <p>属性には名前がつけられます。属性名は自由につけることができるのですが、Hyper Estraierが標準的に使う属性はシステム属性として予め定義されています。システム属性の名前には「@」が先頭につきます。システム属性は以下のものがあります。</p>
67    
68     <ul>
69     <li><kbd>@id</kbd> : 文書をインデックスに登録した際に自動的に振られます。</li>
70     <li><kbd>@uri</kbd> : 文書の参照方法を示します。全ての文書に必須です。</li>
71     <li><kbd>@cdate</kbd> : 文書の作成日時を示します。</li>
72     <li><kbd>@mdate</kbd> : 文書の最終更新日時を示します。差分更新に使われます。</li>
73     <li><kbd>@title</kbd> : 文書のタイトルです。検索結果で見出しとして扱われます。</li>
74     <li><kbd>@author</kbd> : 文書の著者です。</li>
75     <li><kbd>@type</kbd> : 文書のメディアタイプです。</li>
76     <li><kbd>@lang</kbd> : 文書の言語です。</li>
77     <li><kbd>@size</kbd> : 文書のサイズです。</li>
78     </ul>
79    
80     <p>システム属性以外の属性はユーザ定義属性と呼ばれます。後述の文書ドラフト形式を使うと、任意のシステム属性とユーザ定義属性をつけることができます。HTMLのmeta要素やMIMEのヘッダもユーザ属性として扱われます。</p>
81    
82     <h3>属性の型</h3>
83    
84     <p>属性には2種類の型があります。文字列型と数値型です。文字列型は、任意の文字列です。文字列型の値には、完全一致、前方一致、後方一致、部分一致の判定ができます。数値型は、数値または日付の情報を表したものです。数値型は文字列を数値に直した上で、大小の判定が行われます。数値型の値は形式によって扱われ方が違います。日付として解釈される場合、UNIX紀元(1970年1月1日0時0分0秒)からの経過秒数が判定に使われます。</p>
85    
86     <ul>
87     <li>全てが数字 → 10進数として解釈される。</li>
88     <li>先頭が0x → 16進数として解釈される。</li>
89     <li>W3CDTF(例:1978-02-11T18:05:32+09:00) → 日付として解釈される。</li>
90     <li>RFC822(例:Sat, 11 Feb 1978 18:05:32 +0900) → 日付として解釈される。</li>
91     <li>YYYY/MM/DD形式(1978/02/11 18:05:32) → 日付として解釈される。</li>
92     <li>上記以外 → -1として解釈される。</li>
93     </ul>
94    
95     <p>属性がどの型であるかは登録時には決定されません。検索時に属性をどちらの型として解釈するが指定されます。属性の長さに制限はありません。</p>
96    
97     <p>文書の属性や本文に指定する文字列はUTF-8で表現されている必要があります。テキストファイルやHTMLなどでそれ以外の文字コードを使っている場合は、UTF-8に変換してください。なお、estcmdは文字コードを自動判定して変換処理を行います。</p>
98    
99     <p>システム属性でもユーザ属性でも、実際にどのような値を入れるかはユーザやアプリケーションに任されます。指定する側と解釈する側で合意が取れていれば問題ないわけですが、RFCなどで関連する規定がある場合はそれに従うのがよいでしょう。例えば、「@type」にはRFC2045のメディアタイプの書式を用い、「@lang」にはISO639の言語コード(「ja」「en」など)を用いるとよいでしょう。ユーザ属性の仕様を決める際にはDublin Coreの規格を参考にするといいかもしれません。</p>
100    
101     <h3>URI属性</h3>
102    
103     <p>URI(Uniform Resource Identifier)は、文書を識別するための文字列です。HTTPやFTPやLDAPのURL(Uniform Resource Locator)はURIの一種です。インデックスに登録する全ての文書にはURI属性がついている必要があります。</p>
104    
105     <p>外部(インターネット)に公開されるURIは、世界中のどのユーザからも一意に識別できる必要があります。したがって、ローカルホストでしか通用しない「file://」のURLは外部に公開すべきではありません。estseek.cgiは「file://」のURLを「http://」や「ftp://」などに置換する機能を備えていますので、それを活用してください。</p>
106    
107     <p>URIはファイルを識別するだけのものではありません。書籍のISBNなどのURN(Uniform Resource Name)もURIの一種です。また、URIのスキーマは独自に定義することもできます。例えば、XYZ社の社員名簿の全文検索システムであれば、社員番号を含めた「xyz:empno:12345」のようなURI属性を生成するのもよいでしょう。</p>
108    
109     <p>URIに日本語などのマルチバイト文字をそのまま使ってはいけません。その場合、一般にURLエンコードと呼ばれるエスケープ処理が必要となります。URIの仕様についてはRFC2396を参照してください。</p>
110    
111     <p>estcmdは、「file://」で始まるローカルファイルシステムのURLをURI属性として自動的につけてくれます。ただし、対象文書がURI属性を独自に定義している場合はそちらを優先します。ローカルファイルシステムのURLは「_lpath」という属性としても記録されます。ローカルファイルシステムのファイル名をUTF-8に正規化した文字列は「_lfile」という属性として記録されます。</p>
112    
113     <hr />
114    
115     <h2 id="formats">ファイル形式</h2>
116    
117     <p>estcmdが扱う4種類のファイル形式のそれぞれがどのように扱われるかを説明します。その他の形式を扱うためのフィルタについては後述します。</p>
118    
119     <h3>プレーンテキスト</h3>
120    
121     <p>特に構造のない文字列です。デフォルトでは、ファイル名の接尾辞が「.txt」「.text」「.asc」の場合にプレーンテキストとして扱われます。</p>
122    
123     <ul>
124     <li>文字コードは自動判定されます。</li>
125     <li>@type属性として「text/plain」が記録されます。</li>
126     <li>@size属性としてファイルサイズが記録されます。</li>
127     </ul>
128    
129     <h3>HTML</h3>
130    
131     <p>言わずもがな、Webで使われるハイパーテキストです。デフォルトでは、ファイル名の接尾辞が「.html」「.htm」「.xhtml」「.xht」の場合にHTMLとして扱われます。</p>
132    
133     <ul>
134     <li>文字コードは自動判定されますが、meta要素で文字コードが指定された場合はそちらが優先されます。</li>
135     <li>title要素があれば、その内容が@title属性として記録されます。</li>
136     <li>meta要素のname属性でauthorが指定されていれば、そのcontent要素の値が@author属性として記録されます。</li>
137     <li>@type属性として「text/html」が記録されます。</li>
138     <li>@size属性としてファイルサイズが記録されます。</li>
139     <li>meta要素のname属性またはhttp-equiv属性が指定されていれば、その属性値を小文字に変換した名前のユーザ属性として、content要素の値を記録します。</li>
140     <li>@title属性の値は隠しテキストとして扱われます。</li>
141     </ul>
142    
143     <p>隠しテキストについては後述します。</p>
144    
145     <h3>MIME(電子メール)</h3>
146    
147     <p>RFC822に基づくメッセージ交換のためのデータ形式です。デフォルトでは、ファイル名の接尾辞が「.eml」「.mime」「.mht」「.mhtml」の場合にMIMEとして扱われます。</p>
148    
149     <ul>
150     <li>文字コードは自動判定されますが、Content-Typeヘッダで文字コードが指定された場合はそちらが優先されます。</li>
151     <li>Subjectヘッダがあれば、その内容が@title属性として記録されます。</li>
152     <li>Fromヘッダがあれば、その内容が@author属性として記録されます。</li>
153     <li>Dateヘッダがあれば、その内容が@cdate属性および@mdate属性として記録されます。</li>
154     <li>@type属性として「message/rfc822」が記録されます。</li>
155     <li>@size属性としてファイルサイズが記録されます。</li>
156     <li>全てのヘッダの値は、ヘッダ名を小文字に変換した名前のユーザ属性として指定されます。</li>
157     <li>@title属性の値は隠しテキストとして扱われます。</li>
158     </ul>
159    
160     <p>マルチパートの各パートの中身が「text/plain」か「text/html」か「message/rfc822」の場合には、その内容を本文として扱います。これによって、Webアーカイブ(MHTML)も適切に扱うことができます。ヘッダの値がMIMEエンコードされていた場合はそれをデコードして扱います。エンティティがBase64やquoted-printableでエンコードされていた場合はそれをデコードして扱います。</p>
161    
162     <h3>文書ドラフト</h3>
163    
164     <p>Hyper Estraier独自のデータ形式です。文書ドラフトを中間フォーマットとして使うことで、様々な形式の文書を統合的に扱うことができます。デフォルトでは、ファイル名の接尾辞が「.est」の場合に文書ドラフトとして扱われます。</p>
165    
166     <p>文書ドラフトの形式はRFC822に似ていますが、細かい違いがあります。ヘッダの区切り文字は「:」でなく「=」です。また、「=」の後に空白を置く必要はありません。例えば、MIDIの歌詞データを登録する際には、以下のようなデータになるでしょう。</p>
167    
168     <pre>@uri=http://www.music-estraier.com/mididb/w/wa/wakamonotachi.kar
169     @title=若者たち
170     @author=佐藤勝,藤田敏雄
171     @cdate=2004-11-01T23:11:18+09:00
172     @mdate=2005-03-21T08:07:45+09:00
173     category=chorus,j-pop
174    
175     君の行く道は 果てしなく遠い
176     だのになぜ 歯をくいしばり
177     君は行くのか そんなにしてまで
178     若者たち
179     佐藤勝,藤田敏雄
180     </pre>
181    
182     <p>文書ドラフトは以下の仕様を満たす必要があります。</p>
183    
184     <ul>
185     <li>正常なUTF-8エンコードのテキストから構成されます。</li>
186     <li>改行形式はUNIX形式(LF)かMS-DOS形式(CR+LF)のどちらかです。</li>
187     <li>属性部とテキスト部からなり、両者は最初に出現した空行で区切られます。</li>
188     <li>属性部において、各行は属性の指定として扱われます。属性名と値は最初に出現した「=」で区切られます。</li>
189     <li>テキスト部において、各行は本文の文字列として扱われます。行頭がタブ文字で始まっている場合、その行は隠しテキストとして扱われます。</li>
190     </ul>
191    
192     <p>隠しテキストは、通常の本文と同様に検索語が抽出されますが、検索結果の紹介文では表示されないことが特徴です。タイトルや著者に含まれる語も全文検索の対象にしたい場合には、タイトルや著者と同じ文字列を隠しテキストとしても指定するとよいでしょう。</p>
193    
194     <p>文書ドラフトの最大の特徴は、URI属性を指定できることです。つまり、文書ドラフト自体のURIではなく、別のファイルのURIをインデックスに記録することができるのです。WebからHTMLデータを収集して文書ドラフト形式で保存するプログラムを作れば、簡易的なWeb検索エンジンを簡単に実現することができます。文書ドラフトを保存するオーバーヘッドをかけたくない場合は、いよいよAPIを使うことになります。</p>
195    
196     <hr />
197    
198     <h2 id="searchcond">検索条件式</h2>
199    
200     <p>検索条件には、全文検索条件と属性検索条件の2種類があります。両方を同時に指定することもでき、その場合は両方を満たした文書が該当とみなされます。さらに、全文検索の条件式には、通常書式と簡便書式の2種類があります。用途に応じて使い分けてください。</p>
201    
202     <h3>全文検索条件の通常書式</h3>
203    
204     <p>全文検索条件は、指定した語句が本文に含まれる文書を検索するためのものです。例えば、「コンピュータ」という文字列を含む文書を探したいなら、検索式に「コンピュータ」とそのまま指定してください。</p>
205    
206     <p>複数の検索語を空白で区切ってならべることもできます。例えば、「United Nations」と指定すると、「United」の直後に「Nations」が来る文書を検索します。</p>
207    
208     <p>検索語を「<kbd>AND</kbd>」で挟んで並べると、AND検索ができます。例えば、「インターネット AND セキュリティ」と指定すると、「インターネット」と「セキュリティ」の両方を含む文書を検索します。</p>
209    
210     <p>検索語を「<kbd>ANDNOT</kbd>」で挟んで並べると、NOT検索ができます。例えば、「スキー ANDNOT スノボー」と指定すると、「スキー」を含むが「スノボー」は含まない文書を検索します。ANDNOT検索は、探したい語が他の語の一部に含まれてうまく検索できない場合にも便利です。「ファイル」で検索すると「プロファイル」がヒットして鬱陶しい場合には、「ファイル ANDNOT プロファイル」とするとよいでしょう。</p>
211    
212     <p>検索語を「<kbd>OR</kbd>」で挟んで並べると、OR検索ができます。例えば、「レモン OR ライム」と指定すると、「レモン」と「ライム」の片方または両方を含む文書を検索します。OR検索は、類義語や表記の揺れに対応した検索をするのに便利です。「woman OR women」などとして英単語の活用を吸収したり、「龍馬 OR 竜馬」などとして漢字表記の揺れを吸収したりするとよいでしょう。</p>
213    
214     <p>「OR」は「AND」や「ANDNOT」よりも優先順位が高いことに注意してください。例えば、「F1 OR F-1 OR Formula One AND 優勝 OR チャンピオン」と入力した場合、「F1」か「F-1」か「Formula One」のどれかを含んで、かつ「優勝」か「チャンピオン」のどちらかを含む文書を探します。</p>
215    
216     <p>Hyper Estraierは、日本語だけでなく、英語、ドイツ語、フランス語、中国語など、大抵の言語を扱うことができます。英字の大文字と小文字の違いは無視されます。「Japan」「japan」「JAPAN」「jaPaN」は全て同じです。ダイアクリティカルマーク付きのラテン文字や、ギリシア文字、キリル文字でも同様です。</p>
217    
218     <p>「AND」「ANDNOT」「OR」は演算子ですので、大文字で書かなければなりません。また、前後に空白が必要です。「AND」という文字列を含む文書を探したい場合は、「and」と指定してください。「ANDNOT」や「OR」でも同様です。</p>
219    
220     <p>全ての文書に該当するワイルドカードとして、「[UVSET]」という定数があります。これを使うと、純粋なNOT検索ができます。例えば、「[UVSET] ANDNOT ファイル」とすると、「ファイル」を含まない全ての文書を検索します。ただし、この処理は遅いです。</p>
221    
222     <h3>全文検索条件の簡便書式</h3>
223    
224     <p>Googleなどの検索エンジンでは、空白で区切ることでAND条件を指定できます。そのような挙動の方が望ましい場合は、簡便書式を使うことができます。簡便書式を使うかどうかは、アプリケーションのコマンドラインのオプションや設定ファイルで指定します。estseek.cgiのデフォルトの設定では、簡便書式が使われるようになっています。</p>
225    
226     <p>簡便書式では、空白または「<kbd>&amp;</kbd>」で区切るとAND条件になります。例えば、「インターネット セキュリティ」と入力すると、「インターネット」と「セキュリティ」の両方を含む文書を検索します。</p>
227    
228     <p>複数の検索語を「<kbd>""</kbd>」で括ると、フレーズ検索ができます。例えば、「"United Nations"」と入力すると、「United」の直後に「Nations」が出現する文書を検索します。</p>
229    
230     <p><kbd>!</kbd>」を使うとNOT検索ができます。例えば、「スキー ! スノボー」と入力すると、「スキー」を含むが「スノボー」を含まない文書を検索します。</p>
231    
232     <p><kbd>|</kbd>」を使うとOR検索ができます。例えば、「レモン | ライム」と入力すると、「レモン」か「ライム」の片方または両方を含む文書を検索します。</p>
233    
234     <p>「|」の優先順位が「&amp;」や「!」より高いのは通常書式と同じです。</p>
235    
236     <h3>属性検索条件</h3>
237    
238     <p>属性検索条件は、各文書が持つ属性に対して演算子を適用して、該当する文書を検索するためのものです。属性条件式は属性名と演算子と値を空白で区切って並べたものです。例えば、「@title STRINC 重要」と指定すると、タイトルに「重要」という文字列を含む文書だけに絞り込みます。「STRINC」は演算子です。属性検索用の演算子には以下のものがあります。</p>
239    
240     <ul>
241     <li><kbd>STREQ</kbd> : 指定した文字列と一致する。</li>
242     <li><kbd>STRNE</kbd> : 指定した文字列と一致しない。</li>
243     <li><kbd>STRINC</kbd> : 指定した文字列を含む。</li>
244     <li><kbd>STRBW</kbd> : 指定した文字列で始まる。</li>
245     <li><kbd>STREW</kbd> : 指定した文字列で終わる。</li>
246     <li><kbd>NUMEQ</kbd> : 数値や日付が指定したものと等しい。</li>
247     <li><kbd>NUMNE</kbd> : 数値や日付が指定したものと等しくない。</li>
248     <li><kbd>NUMGT</kbd> : 数値や日付が指定したものより大きい。</li>
249     <li><kbd>NUMGE</kbd> : 数値や日付が指定したものと同じかより大きい。</li>
250     <li><kbd>NUMLT</kbd> : 数値や日付が指定したものより小さい。</li>
251     <li><kbd>NUMLE</kbd> : 数値や日付が指定したものと同じかより小さい。</li>
252     </ul>
253    
254     <p>演算子の前に「<kbd>!</kbd>」を置いて「!STREQ」などとすると、条件に当てはまらないものに絞り込みます。例えば、「@title !STRBW ※未承諾広告」などとします。文字列の演算子の前に「<kbd>I</kbd>」を置いて「ISTREQ」などとすると、文字列の大文字と小文字の違いを無視します。「!」と「I」を両方指定する場合、「!ISTREQ」などとします。演算子を省略して属性名のみを指定した場合、値は問わずに、その属性を備える文書を該当とみなします。</p>
255    
256     <p>属性条件は複数指定することができます。その場合、指定された全ての条件を満たす文書が該当とみなされます。なお、属性検索を行うと候補の全ての文書の情報を参照するため、検索速度が多少遅くなります。</p>
257    
258     <h3>順序指定</h3>
259    
260     <p>順序指定式によって、結果の表示順序を指定することもできます。順序指定式は属性名と演算子を空白で区切って並べたものです。例えば、「@size NUMA」と指定すると、サイズが小さい文書から並べられます。「NUMA」は演算子です。順序指定用の演算子には以下のものがあります。演算子を省略した場合は、「STRA」が指定されたとみなします。</p>
261    
262     <ul>
263     <li><kbd>STRA</kbd> : 文字列(辞書順)の昇順。</li>
264     <li><kbd>STRD</kbd> : 文字列(辞書順)の降順。</li>
265     <li><kbd>NUMA</kbd> : 数値または日付の昇順。</li>
266     <li><kbd>NUMD</kbd> : 数値または日付の降順。</li>
267     </ul>
268    
269     <p>順序指定を行わなかった場合は、スコアの降順になります。スコアとは、各文書に指定した検索語がどのくらい含まれるかという指標です。AND検索やOR検索で複数の語が指定された場合、TF-IDF法に基づいてスコアの調整が行われます。「the」や「する」といった頻出語よりも、「hippopotamus」や「咀嚼」といった特徴的な語句に高いスコアをつけるということです。また、検索語が同数程度含まれるならば、総語数の多い文書よりも総語数の少ない文書の方がスコアが高くなります。</p>
270    
271     <p>順序指定式は一つしか指定できません。なお、順序指定を行うと候補の全ての文書の情報を参照するため、検索速度が多少遅くなります。</p>
272    
273     <h3>類似検索</h3>
274    
275     <p>ある文書に似た文書を探す、類似検索もサポートされます。関連文書検索とも呼ばれることもあります。類似検索の利用方法はアプリケーションによって様々ですが、典型的には、検索結果に示される文書のひとつをユーザが指定して、それに似た文書を再検索するために使われます。類似検索の結果は関連度の降順に並べられます。関連度はベクトル空間モデルという考え方に基づいて算出されます。文書からキーワードを取り出してベクトルとして表現し、ベクトル同士のなす角の余弦を関連度とするものです。ちょっと難しい言い方になりましたが、要するに、語彙が似通った文書は類似度が高くなるということです。キーワードとしては、文書内の頻度にTF-IDF法で重みづけを行った結果が上位の語句が選択されます。</p>
276    
277     <p>類似検索の条件式をユーザが入力する必要はありませんが、アプリケーションに類似検索機能をつけるためには書式を知っておく必要があります。検索フレーズが「[SIMILAR]」という演算子で始まっている場合に類似検索が行われます。「[SIMILAR]」の後ろには、種文書(類似判定の元となる文書)のベクトルの要素を列挙します。各要素は「WITH」演算子で始まり、スコアの数値とキーワードの文字列を空白で区切って指定します。例えば、300の「日本」と250の「japan」と100の「東京」を含む文書を仮想の種文書とする場合は、「[SIMILAR] WITH 300 日本 WITH 250 japan WITH 100 東京」と指定します。</p>
278    
279     <p>関連文書検索と順序指定式を同時に指定した場合、関連度が0.5以上の文書に絞り込んだ上で、順序指定式に基づいて並べられます。なお、関連文書検索の検索速度はとても遅いです。</p>
280    
281     <hr />
282    
283     <h2 id="wordextraction">検索語の抽出</h2>
284    
285     <p>文書の本文や検索フレーズの文字列から検索語を抽出する際には、いくつかのルールがあります。ここでは、そのルールついて詳しく説明します。</p>
286    
287     <h3>2-gram方式</h3>
288    
289     <p>英語やその他のヨーロッパの言語にのように空白で語が区切れる場合、空白で区切った文字列を検索語として登録します。「It is fine today.」という文字列からは、「it」「is」「fine」「today」「.」の5個の検索語が抽出されます。</p>
290    
291     <p>日本語をはじめとする、語を空白で区切れない言語の場合は、N-gramという手法で検索語が抽出されます。連続する2文字を語として、1文字ずつずらしながら語を抽出する手法です。2文字を語とするので2-gramと呼ばれることもあります。例えば「本日は晴天なり。」という文字列からは、「本日」「日は」「は晴」「晴天」「天な」「なり」「り。」の7個の検索語が抽出されます。</p>
292    
293     <p>2-gram方式だと1文字の検索語はどの検索キーにも一致しないことになりますが、それでも検索は可能です。1文字の検索語が指定された場合、その文字を含む全てのキーのOR検索が内部的に行われます。ただし、調べるキーの数が多いので、検索速度は少し遅くなります。</p>
294    
295     <h3>検査の省略による高速化</h3>
296    
297     <p>「ホンマグロ」という検索語が指定された場合「ホン」「ンマ」「マグ」「グロ」を含み、かつそれぞれが隣り合っている部分がある文書を該当とみなせばよいことになります。しかし、デフォルトでは全ての語をの検査をせず、「ホン」と「マグ」だけを調べます。「ホン」の1つ飛ばした隣に「マグ」があるならば、「ンマ」を調べる必要はないからです。また、各検索語は後ろになにが来るかという情報を持っているので、「マグ」を調べると「グロ」の存在もわかります。このような工夫をしてなるべく検査を省略した方が、応答時間が短くなって快適です。</p>
298    
299     <p>ただし、スコアの計算は、調べた検索語が各該当文書の中で出現する数を基準に行うので、全ての語を調べた方が精度が高まることが多いです。つまり、速度と精度のトレードオフの関係になります。どちらを優先するかはアプリケーションのコマンドラインオプションや設定ファイルで指定します。estseek.cgiのデフォルトの設定では1個飛ばしで検査するようになっています。</p>
300    
301     <h3>精度の制限による高速化</h3>
302    
303     <p>Hyper Estraierでは、N-gramの連接判定の精度を落とすことによって処理速度を上げる工夫がなされています。検索やインデックス更新の処理が高速な反面、まれに検索語が含まれない文書が該当とみなされることがあります。検索語の後ろ2語まで(日本語なら3文字分)の連接判定しかしませんので、「シミュレーション」で検索した場合、「シミュレ」「ミュレー」「ュレーシ」「レーショ」「ーション」の全てを含む文書は、たとえ「シミュレーション」がなくても該当してしまいます。また、連接判定にはハッシュ関数を用いますので、まれ(251分の1の確率)に精度が3語分を下回ることがあります。ただし、スニペットを作る際には完全な連接判定が行われますので、スニペットの中に検索語のハイライトが含まれない文書は検索ゴミであることが容易にわかります。</p>
304    
305     <h3>分かち書き方式との比較</h3>
306    
307     <p>N-gram方式と対比されるアプローチとして、分かち書き方式があります。Hyper Estraierの前身である<a href="http://estraier.sourceforge.net/">Estraier</a>では分かち書き方式を採用していました。N-gram方式は再現率がほぼ完璧である(検索漏れがない)という利点がありますが、分かち書き方式に比べて精度が低い(検索ゴミが多い)という欠点があります。検索システムの用途や文書の内容によってどちらが適するかは変わってきます。興味を持たれた方は、Hyper EstraierとEstraierの使い勝手を比べてみてください。</p>
308    
309     <hr />
310    
311     <h2 id="estcmd">管理用コマンド</h2>
312    
313     <p>ここでは、インデックス管理用コマンドestcmdの詳細な仕様を説明します。検索もできるので、estcmdをスクリプト言語から呼び出せばそれなりのアプリケーションが簡単に作れます。</p>
314    
315     <h3>書式</h3>
316    
317     <p>estcmdは多くのサブコマンドの集合体です。サブコマンドの名前は第1引数で指定されます。その他の引数はサブコマンドの種類に応じて解釈されます。<var>db</var>という引数はインデックスのパスです。</p>
318    
319     <dl>
320     <dt><kbd>estcmd put [-cl] <var>db</var> [<var>file</var>]</kbd></dt>
321     <dd>文書ドラフト形式のファイルを登録します。</dd>
322     <dd><var>file</var>は対象のファイルを指定しますが、省略した場合は標準入力が読み込まれます。</dd>
323     <dd>-clを付けると、上書きされた文書の領域を整理します。</dd>
324     </dl>
325    
326     <dl>
327     <dt><kbd>estcmd out [-cl] <var>db</var> <var>expr</var></kbd></dt>
328     <dd>特定の文書の情報をインデックスから削除します。</dd>
329     <dd><var>expr</var>は対象のID番号かURIを指定します。</dd>
330     <dd>-clを付けると、削除された文書の領域を整理します。</dd>
331     </dl>
332    
333     <dl>
334     <dt><kbd>estcmd get <var>db</var> <var>expr</var> [<var>attr</var>]</kbd></dt>
335     <dd>特定の文書の情報を文書ドラフト形式で出力します。</dd>
336     <dd><var>expr</var>は対象のID番号かURIを指定します。</dd>
337     <dd><var>attr</var>を付けると、その属性の値のみを出力します。</dd>
338     </dl>
339    
340     <dl>
341     <dt><kbd>estcmd list <var>db</var></kbd></dt>
342     <dd>インデックスに登録されている全ての文書のID番号を出力します。</dd>
343     </dl>
344    
345     <dl>
346     <dt><kbd>estcmd uriid <var>db</var> <var>uri</var></kbd></dt>
347     <dd>指定したURIの文書のID番号を出力します。</dd>
348     <dd><var>uri</var>は対象のURIを指定します。</dd>
349     </dl>
350    
351     <dl>
352     <dt><kbd>estcmd meta <var>db</var> [<var>name</var> [<var>value</var>]]</kbd></dt>
353     <dd>データベースのメタデータを扱います。</dd>
354     <dd><var>name</var>はメタデータの名前を指定します。省略した場合は名前の一覧を出力します。</dd>
355     <dd><var>value</var>は記録するメタデータの値を指定します。省略した場合は現状の値を出力します。空文字列の場合は削除します。</dd>
356     </dl>
357    
358     <dl>
359     <dt><kbd>estcmd inform <var>db</var></kbd></dt>
360     <dd>インデックスに登録された文書数と異なり語数を出力します。</dd>
361     </dl>
362    
363     <dl>
364     <dt><kbd>estcmd optimize [-onp] [-ond] <var>db</var></kbd></dt>
365     <dd>インデックスを最適化して、不要な領域を削除します。</dd>
366     <dd>-onpを付けると、削除されたドキュメントの領域を回収する処理を省略します。</dd>
367     <dd>-ondを付けると、データベースファイルの最適化を省略します。</dd>
368     </dl>
369    
370     <dl>
371     <dt><kbd>estcmd search [-ic <var>enc</var>] [-vu|-va|-vf|-vs|-vh|-vx|-dd] [-gs|-gf|-ga] [-ni] [-sf] [-hs] [-attr <var>expr</var>] [-ord <var>expr</var>] [-max <var>num</var>] [-sim <var>id</var>] <var>db</var> [<var>phrase</var>]</kbd></dt>
372     <dd>インデックスに登録された文書を検索します。</dd>
373     <dd><var>phrase</var>は全文検索の検索式を指定します。</dd>
374     <dd>-icは引数の文字コードを指定します。デフォルトはUTF-8です。</dd>
375     <dd>-vuを付けると、ID番号とURIをタブ区切りにした形式で結果を出力します。</dd>
376     <dd>-vaを付けると、属性情報を含めたマルチパート形式で結果を出力します。</dd>
377     <dd>-vfを付けると、文書ドラフト形式を含めたマルチパート形式で結果を出力します。</dd>
378     <dd>-vsを付けると、属性情報とスニペットを含めたマルチパート形式で結果を出力します。</dd>
379     <dd>-vhを付けると、属性情報とスニペットを人間が読みやすい形式にして結果を出力します。</dd>
380     <dd>-vxを付けると、属性情報とスニペットをXML形式にして結果を出力します。</dd>
381     <dd>-ddを付けると、結果を文書ドラフト形式のファイルとして保存します。</dd>
382     <dd>-gsを付けると、N-gramの全てのキーの存在を検査します。デフォルトは1個置きです。</dd>
383     <dd>-gfを付けると、N-gramのキーを2個置きで検査します。</dd>
384     <dd>-gaを付けると、N-gramのキーを3個置きで検査します。</dd>
385     <dd>-niを付けると、TF-IDF法によるスコアの調整を行いません。</dd>
386     <dd>-sfを付けると、検索式を簡便形式として扱います。</dd>
387     <dd>-hsを付けると、該当文書のスコア情報をヒントとして出力します。</dd>
388     <dd>-attrは絞り込みの属性条件を指定します。複数指定可能です。</dd>
389     <dd>-ordはソート条件を指定します。デフォルトはスコアの降順です。</dd>
390     <dd>-maxは最大表示件数を指定します。負数にすると無制限になります。デフォルトは10件です。</dd>
391     <dd>-simは類似検索の種文書のID番号を指定します。</dd>
392     </dl>
393    
394     <dl>
395     <dt><kbd>estcmd gather [-cl] [-fe|-ft|-fh|-fm] [-fx <var>sufs</var> <var>cmd</var>] [-fz] [-fo] [-ic <var>enc</var>] [-il <var>lang</var>] [-pc <var>enc</var>] [-pf] [-apn] [-sd] [-cm] [-cs <var>num</var>] <var>db</var> [<var>file</var>|<var>dir</var>]</kbd></dt>
396     <dd>ファイルシステムを探索して文書を登録します。</dd>
397     <dd>第3引数としてファイル名を指定すると、そのファイルから処理対象のパスのリストを読み込みます。「-」を指定した場合、標準入力が読み込まれます。findコマンドの出力を読み込むと便利です。</dd>
398     <dd>第3引数としてディレクトリ名を指定すると、そのディレクトリ以下の全てのファイルを処理対象にします。</dd>
399     <dd>-clを付けると、上書きされた文書の領域を整理します。</dd>
400     <dd>-feを付けると、処理対象の全てのファイルを文書ドラフトとして扱います。デフォルトでは、拡張子によって文書形式を判断し、サポート外のものは無視されます。</dd>
401     <dd>-ftを付けると、処理対象の全てのファイルをプレーンテキストとして扱います。</dd>
402     <dd>-fhを付けると、処理対象の全てのファイルをHTMLとして扱います。</dd>
403     <dd>-fmを付けると、処理対象の全てのファイルをMIMEとして扱います。</dd>
404     <dd>-fxは、ファイル名の接尾辞に関連づけた外部コマンドを指定します。カンマ区切りで複数の接尾辞を指定できます。コマンド名の前に「T@」をつけるとその出力がプレーンテキストとして解析され、「H@」をつけるとHTMLとして解析され、「M@」をつけるとMIMEとして解析され、いずれでもない場合は文書ドラフトとして解析されます。このオプションは複数回指定できます。</dd>
405     <dd>-fzを付けると、-fxの条件に当てはまらないファイルを無視します。</dd>
406     <dd>-foを付けると、処理対象のファイルを読み込みません。</dd>
407     <dd>-icは対象文書の文字コードを指定します。デフォルトは自動判定です。</dd>
408     <dd>-ilは文字コードの判定で優先される言語を指定します。デフォルトは英語です。</dd>
409     <dd>-pcはファイルのパスの文字コードを指定します。デフォルトはISO-8859-1です。</dd>
410     <dd>-pfを付けると、ファイル名の代わりにフルパスを属性として記録します。</dd>
411     <dd>-apnをつけると、全ての言語をN-gram法で処理します。</dd>
412     <dd>-sdを付けると、ファイルの作成日時と更新日時を文書の属性として追加します。</dd>
413     <dd>-cmを付けると、文書の属性の更新日時がファイルの更新日時より古い場合にのみ登録を行います。</dd>
414     <dd>-csは、キャッシュメモリのサイズをメガバイト単位で指定します。デフォルトは64MBです。</dd>
415     </dl>
416    
417     <dl>
418     <dt><kbd>estcmd purge [-cl] [-fc] <var>db</var> [<var>prefix</var>]</kbd></dt>
419     <dd>インデックス内にあってファイルシステム上にない文書の情報を削除します。</dd>
420     <dd><var>prefix</var>を指定すると、その文字列で始まるURIの文書のみを対象とします。</dd>
421     <dd>-clを付けると、削除された文書の領域を整理します。</dd>
422     <dd>-fcを付けると、ファイルがあるかないかにかかわらず文書情報を削除します。</dd>
423     </dl>
424    
425     <dl>
426     <dt><kbd>estcmd extkeys [-fc] [-ni] [-kn <var>num</var>] <var>db</var> [<var>prefix</var>]</kbd></dt>
427     <dd>インデックス内の各文書のキーワードを抽出したデータベースを作成します。</dd>
428     <dd><var>prefix</var>を指定すると、その文字列で始まるURIの文書のみを対象とします。</dd>
429     <dd>-fcを付けると、既にキーワードが登録されている文書でもキーワードを作りなおします。</dd>
430     <dd>-niを付けると、TF-IDF法によるスコアの調整を行いません。</dd>
431     <dd>-knは、抽出するキーワードの数を指定します。</dd>
432     </dl>
433    
434     <dl>
435     <dt><kbd>estcmd draft [-ft|-fh|-fm] [-ic <var>enc</var>] [-il <var>lang</var>] [<var>file</var>]</kbd></dt>
436     <dd>各種形式のファイルを文書ドラフト形式に変換して出力します。</dd>
437     <dd><var>file</var>は対象のファイルを指定しますが、省略した場合は標準入力が読み込まれます。</dd>
438     <dd>-ftを付けると、対象をプレーンテキストとして扱います。デフォルトは文書ドラフト形式です。</dd>
439     <dd>-fhを付けると、対象をHTMLとして扱います。</dd>
440     <dd>-fmを付けると、対象をMIMEとして扱います。</dd>
441     <dd>-icは対象文書の文字コードを指定します。デフォルトは自動判定です。</dd>
442     <dd>-ilは文字コードの判定で優先される言語を指定します。デフォルトは英語です。</dd>
443     </dl>
444    
445     <dl>
446     <dt><kbd>estcmd break [-ic <var>enc</var>] [-il <var>lang</var>] [-apn] [-wt] [<var>file</var>]</kbd></dt>
447     <dd>プレーンテキストを検索語に分解します。</dd>
448     <dd><var>file</var>は対象のファイルを指定しますが、省略した場合は標準入力が読み込まれます。「@」で始まる場合、「@」より後ろの文字列そのものを処理対象とします。</dd>
449     <dd>-icは処理対象の文字コードを指定します。デフォルトはUTF-8です。</dd>
450     <dd>-ilは文字コードの判定で優先される言語を指定します。デフォルトは英語です。</dd>
451     <dd>-apnをつけると、全ての言語をN-gram法で処理します。</dd>
452     <dd>-wtを付けると、「末尾の1-gram」も出力します。</dd>
453     </dl>
454    
455     <dl>
456     <dt><kbd>estcmd randput [-ren|-rla|-reu|-ror|-rjp|-rch] [-cs num] <var>db</var> <var>dnum</var></kbd></dt>
457     <dd>無作為に生成した文書を登録するテストを行います。</dd>
458     <dd>-renを付けると、英文風の文書のみを登録します。デフォルトは全種類を登録します。</dd>
459     <dd>-rlaを付けると、独文、仏文、西文風の文書のみを登録します。</dd>
460     <dd>-reuを付けると、希文、露文風の文書のみを登録します。</dd>
461     <dd>-rorを付けると、アジア全域の文字を使った文書のみを登録します。</dd>
462     <dd>-rjpを付けると、和文風の文書のみを登録します。</dd>
463     <dd>-rchを付けると、UCS-2の全ての文字を使った文書のみを登録します。</dd>
464     <dd>-csは、キャッシュメモリのサイズをメガバイト単位で指定します。デフォルトは64MBです。</dd>
465     </dl>
466    
467     <dl>
468     <dt><kbd>estcmd wicked <var>db</var> <var>dnum</var></kbd></dt>
469     <dd>文書の登録、削除、検索、データベースの開閉、最適化などを無作為に繰り返すテストを行います。</dd>
470     <dd><var>dnum</var>は処理の回数を指定します。</dd>
471     </dl>
472    
473     <dl>
474     <dt><kbd>estcmd regression <var>db</var></kbd></dt>
475     <dd>回帰テストを行います。</dd>
476     </dl>
477    
478     <dl>
479     <dt><kbd>estcmd version</kbd></dt>
480     <dd>バージョンと著作権の情報を出力します。</dd>
481     </dl>
482    
483     <p>全てのサブコマンドは、処理が正常に終了した場合には0を、そうでない場合は1を終了ステータスにします。put、out、gather、purge、randput、wicked、regressionについては、実行中のプロセスに1(SIGHUP)、2(SIGINT)、3(SIGQUIT)、13(SIGPIPE)、15(SIGTERM)のどれかのシグナルを送ることにより、データベースを閉じて正常終了させることができます。</p>
484    
485     <p>gather等の「-ic」オプションでは、「UTF-8」「EUC-JP」「Shift_JIS」「ISO-2022-JP」「ISO-8859-1」などの、IETFに登録されている文字コード名を指定してください。実際には、iconvが認識する名前は全て使えます。また、「-il」オプションでは、「en」(英語)、「ja」(日本語)、「zh」(中国語)、「ko」(朝鮮語)のどれかを指定してください。</p>
486    
487     <p>gatherの「-fx」オプションで指定した外部コマンドは、第1引数に対象文書のパス、第2引数に出力先のパスが渡されて呼び出されます。すなわち、外部コマンドは第1引数のファイルを解析して文書ドラフトやプレーンテキストやHTMLやMIMEを生成し、第2引数のファイルに書き込むという機能を持つことが期待されます。なお、対象文書は一時ファイルとしてコピーされて渡されます。対象文書の元来のパスは環境変数ESTORIGFILEの値として渡されますが、決して元のファイルを変更してはいけません。ESTORIGFILEを使う場合はファイルを読み込む必要はありませんので、「-fo」オプションも同時につけるとよいでしょう。</p>
488    
489     <h3>応用例:メールボックスのインデクシング</h3>
490    
491     <p>mh形式(1メール=1ファイル)でメールボックスを管理するメーラ(Mew、Wanderlust、Sylpheedなど)をお使いなら、個々のメールを対象にした全文検索のインデックスを簡単に作ることができます。例えば、メールボックスが「/home/mikio/Mail」にあり、その中のbusinessフォルダかfriendsフォルダに振り分けられたメールを登録する場合、以下のコマンドを実行します。</p>
492    
493     <pre>find /home/mikio/Mail -type f | egrep 'inbox/(business|friends)/[0-9]+$' |
494     estcmd gather -cl -fm -cm casket -
495     </pre>
496    
497     <p>作成されたインデックスは、estseek.cgiを使って検索することができます。なお、-cmオプションをつけておくことで、差分更新ができます。MIMEにはDateヘッダがありますので、-sdオプションでファイルの更新時刻を持ってくる必要はありません。</p>
498    
499     <p>mh形式以外のメーラをお使いの場合は、mh形式になるようにメールをエクスポートしてください。Windowsで言うところのEML形式でも構いません。あるいは、APIを使って専用のアプリケーションを作成してください。</p>
500    
501     <h3>応用例:外部コマンドのフィルタ</h3>
502    
503     <p>外部コマンドをフィルタとして呼び出すこともできます。「/usr/local/share/hyperestraier/filter/」に各種のフィルタがインストールされているので、適宜ご利用ください。</p>
504    
505     <p>estfxmantotxtはUNIXのmanのマニュアルをプレーンテキスト形式に変換するフィルタです。以下のように利用して、manのファイルを対象にしたインデックスを作ることができます。</p>
506    
507     <pre>PATH=$PATH:/usr/local/share/hyperestraier/filter ; export PATH
508     find /usr/share/man /usr/local/man -type f |
509     egrep '.*/man[0-3]/.*\.[0-3](.gz)*$' |
510     estcmd gather -cl -fx ".1,.2,.3,.1.gz,.2.gz,.3.gz" "T@estfxmantotxt" -fz -sd -cm casket -
511     </pre>
512    
513     <p>estfxmsotohtmlはMS-Office(Word/Excel/PowerPoint)のファイルをHTML形式に変換するフィルタです。以下のように利用して、MS-Officeのファイルを対象にしたインデックスを作ることができます。なお、estfxmsotohtmlを動作させるには<a href="http://sourceforge.net/projects/wvware/">wvWare</a>(wv-1.0.3)と<a href="http://sourceforge.net/projects/chicago/">xlhtml</a>(ppthtmlも同梱)をインストールしておくことが必要です。</p>
514    
515     <pre>PATH=$PATH:/usr/local/share/hyperestraier/filter ; export PATH
516     estcmd gather -cl -fx ".doc,.xls,.ppt" "H@estfxmsotohtml" -fz -ic UTF-8 -sd -cm casket .
517     </pre>
518    
519     <p>estfxpdftohtmlはPDFのファイルをHTML形式に変換するフィルタです。以下のように利用して、PDFのファイルを対象にしたインデックスを作ることができます。なお、estfxpdftohtmlを動作させるにはpdftohtmlをインストールしておくことが必要です。</p>
520    
521     <pre>PATH=$PATH:/usr/local/share/hyperestraier/filter ; export PATH
522     estcmd gather -cl -fx ".pdf" "H@estfxpdftohtml" -fz -ic UTF-8 -sd -cm casket .
523     </pre>
524    
525     <p>各フィルタの中身を見ていただければ、とても簡単なシェルスクリプトであることがお分かりいただけると思います。シェルやPerlやRuby等で同様のプログラムを書けば様々なフィルタを簡単に作ることができます。ただし、外部コマンドのフィルタは呼び出しのオーバーヘッドが大きいので、大量の文書を扱うのには向いていません。本格的にやるならばAPIを使ってください。</p>
526    
527     <h3>応用例:コマンドラインからの検索</h3>
528    
529     <p>コマンドラインから検索する際には、端末の文字コードを考慮する必要があります。例えば端末の文字コードがEUC-JPの場合は、以下のようにするとよいでしょう。</p>
530    
531     <pre>estcmd search -ic EUC-JP -vh -max 8 casket 'こんにちは' |
532     iconv -f UTF-8 -t EUC-JP -c | less
533     </pre>
534    
535     <p>-icオプションで検索式の文字コードを指定して、iconvで出力の文字コードを変換しています。-vhオプションと-maxオプションは検索結果を見やすくするためにつけています。上述の検索語を可変にしたスクリプトを作っておくと便利かもしれません。</p>
536    
537     <h3>応用例:XML形式の検索結果</h3>
538    
539     <p>各種のスクリプト言語からHyper Estraierの検索結果を手軽に利用するためには、estcmdのXML出力機能を用いるとよいでしょう。XMLの詳しい書式についてはestresult.dtdをご覧ください。</p>
540    
541     <pre>estcmd search -vx -max 8 casket 'socket AND shutdown'
542     </pre>
543    
544     <hr />
545    
546     <h2 id="estseek">検索用CGIスクリプト</h2>
547    
548     <p>ここでは、検索用CGIスクリプトestseek.cgiの詳細な仕様を説明します。設定ファイルの書き方が中心になります。</p>
549    
550     <h3>構成</h3>
551    
552     <p>estseek.cgiが動作するには、設定ファイルとテンプレートファイルとトップページファイルが必要です。それぞれestseek.conf、estseek.tmpl、estseek.topというのが標準的な名前です。</p>
553    
554     <p>設定ファイルの名前はCGIスクリプトの接尾辞を.confに変えたものです。estseek.cgiをestsearch.cgiという名前に変えたとしたら、estsearch.confが読み込まれます。テンプレートファイルとトップページファイルの名前は設定ファイルの中で記述されますので、同一ディレクトリの中にいくつもの検索用ページを設置することができます。</p>
555    
556     <p>「estseek.cgi」は「/usr/local/libexec/estseek.cgi」としてインストールされていますので、それをコピーして利用してください。また、設定ファイルなどのサンプルが「/usr/local/share/hyperestraier/」の中にインストールされていますので、それをコピーして修正すると楽です。「/usr/local/share/hyperestraier/locale/ja/」の中には日本語化されたサンプルもあります。</p>
557    
558     <h3>設定ファイルの書式</h3>
559    
560     <p>設定ファイルは、変数名と値を「:」で区切った形式の行を並べたものです。デフォルトでは、設定ファイルは以下のような内容になっています。</p>
561    
562     <pre>indexname: casket
563     tmplfile: estseek.tmpl
564     topfile: estseek.top
565     logfile:
566     lprefix: file:///home/mikio/public_html/
567     gprefix: http://localhost/
568     gsuffix:
569     dirindex: index.html
570     replace: //localhost/{{!}}//127.0.0.1/
571     replace: //127.0.0.1:80/{{!}}//127.0.0.1/
572     perpage: 10,20,30,40,50,100
573     attrselect: false
574     showscore: false
575     extattr: author|Author
576     extattr: from|From
577     extattr: to|To
578     extattr: cc|Cc
579     extattr: date|Date
580     snipwwidth: 480
581     sniphwidth: 96
582     snipawidth: 96
583     condgstep: 2
584     dotfidf: true
585     smplphrase: true
586     candetail: true
587     smlrvnum: 0
588     spcache:
589     </pre>
590    
591     <p>それぞれの変数の機能を以下に示します。</p>
592    
593     <ul>
594     <li><kbd>indexname</kbd> : インデックスのパスを指示します。</li>
595     <li><kbd>tmplfile</kbd> : テンプレートファイルのパスを指示します。</li>
596     <li><kbd>topfile</kbd> : トップページファイルのパスを指示します。</li>
597     <li><kbd>logfile</kbd> : ログファイルのパスを指示します。</li>
598     <li><kbd>lprefix</kbd> : 登録文書群のローカルURIの接頭辞を指示します。</li>
599     <li><kbd>gprefix</kbd> : 登録文書群の公開URIに付加する接頭辞を指示します。</li>
600     <li><kbd>gsuffix</kbd> : 登録文書群の公開URIに付加する接尾辞を指示します。</li>
601     <li><kbd>dirindex</kbd> : ディレクトリのインデックスファイルの名前を指示します。</li>
602     <li><kbd>replace</kbd> : URIの変換前後の文字列を「{{!}}」で区切って指定します。</li>
603     <li><kbd>perpage</kbd> : 検索結果の表示件数のリストを指示します。</li>
604     <li><kbd>attrselect</kbd> : 属性条件の入力にセレクトボックスを使うかを指定します。trueかfalseです。</li>
605     <li><kbd>showscore</kbd> : スコアを表示するかを指定します。trueかfalseです。</li>
606     <li><kbd>extattr</kbd> : 表示する属性の名前とラベルを「|」で区切って指示します。</li>
607     <li><kbd>snipwwidth</kbd> : 検索結果の紹介文の全体の幅を指示します。</li>
608     <li><kbd>sniphwidth</kbd> : 検索結果の紹介文を作る際に文書の冒頭から取得する幅を指示します。</li>
609     <li><kbd>snipawidth</kbd> : 検索結果の紹介文を作る際に検索語の周辺から取得する幅を指示します。</li>
610     <li><kbd>condgstep</kbd> : N-gramの検査精度を指示します。1だと全ての語を調べ、2だと1個置き、3だと2個置き、4だと3個置きに調べます。</li>
611     <li><kbd>dotfidf</kbd> : TF-IDF法を適用するかどうかを指示します。trueかfalseです。</li>
612     <li><kbd>smplphrase</kbd> : 検索条件式を簡便法にするかどうかを指示します。trueかfalseです。</li>
613     <li><kbd>candetail</kbd> : 詳細表示を有効にするかどうかを指示します。trueかfalseです。</li>
614     <li><kbd>smlrvnum</kbd> : 類似検索のベクトルの次元数を指定します。0以下なら類似検索が無効になります。</li>
615     <li><kbd>spcache</kbd> : スペシャルキャッシュの属性名を指示します。</li>
616     </ul>
617    
618     <p>lprefixとgprefixの関係は少しわかりにくいかもしれません。簡単に言えば、検索結果の各文書のURIから、lprefixに前方一致する部分を削って、代わりにgprefixの文字列を付加するという機能です。lprefix、gprefix、gsuffix、dirindexの処理の例を以下に示します。</p>
619    
620     <ul>
621     <li>lprefix: file:///home/www/public_html/</li>
622     <li>gprefix: http://www.estraier.ad.jp/</li>
623     <li>gsuffix: .html</li>
624     <li>dirindex: index.html</li>
625     </ul>
626    
627     <ol>
628     <li>ファイルのパス → /home/www/public_html/hoge/index</li>
629     <li>登録されるURI → file:///home/www/public_html/hoge/index</li>
630     <li>lprefixとの前方一致部分を削除 → hoge/index</li>
631     <li>gprefixを先頭に連結 → http://www.estraier.ad.jp/hoge/index</li>
632     <li>gsuffixを末尾に連結 → http://www.estraier.ad.jp/hoge/index.html</li>
633     <li>dirindexと一致するファイル名を削除 → http://www.estraier.ad.jp/hoge/</li>
634     </ol>
635    
636     <p>replaceを指定すると、lprefix、gprefix、gsuffix、dirindexの処理を行った後に、さらに変換を行います。複数回指定できます。例えば、「.txt」を「.html」に変えたい場合は、以下のようにします。</p>
637    
638     <pre>.txt{{!}}.html
639     </pre>
640    
641     <p>extattrは任意の属性を表示するのに使います。複数回指定できます。例えば、文書の更新日時を「Modified」というラベルをつけて表示したい場合は「extattr: @mtime|Modified」と書き、文書のサイズを「Size」というラベルをつけて表示したい場合は「extattr: @size|Size」と書きます。</p>
642    
643     <h3>テンプレートファイル</h3>
644    
645     <p>検索ページの見栄えを決めるためのファイルです。HTMLで、記述してある内容がそのまま表示されます。ただし、「&lt;!--ESTFORM--&gt;」の部分には検索フォームが挿入され、「&lt;!--ESTRESULT--&gt;」の部分には検索結果が挿入され、「&lt;!--ESTINFO--&gt;」の部分にはインデックスの情報が挿入されます。CSSやJavaScriptを駆使すれば、かなり自由にユーザインターフェイスをカスタマイズすることができます。</p>
646    
647     <h3>トップページファイル</h3>
648    
649     <p>検索用CGIスクリプトに最初にアクセスした際、あるいは検査条件を全く入力しないでアクセスした際に表示されるメッセージを記述したファイルです。記述してある内容が検索結果の位置にそのまま挿入されます。デフォルトでは検索機能の簡単な使い方が記述してありますが、システムのメンテナンス情報などを記載してもよいでしょう。</p>
650    
651     <h3>検索フォームの設置</h3>
652    
653     <p>Webサイトの検索機能として設置する場合、サイトのトップページに検索フォームを置きたくなるでしょう。その場合、以下のようなHTMLを書いてください。</p>
654    
655     <pre>&lt;form method="get" action="estseek.cgi"&gt;
656     &lt;div&gt;
657     &lt;input type="text" name="phrase" value="" size="32" /&gt;
658     &lt;input type="submit" value="Search" /&gt;
659     &lt;input type="hidden" name="enc" value="UTF-8" /&gt;
660     &lt;/div&gt;
661     &lt;/form&gt;
662     </pre>
663    
664     <p>「estseek.cgi」の部分は設置したestseek.cgiのURLにしてください。「UTF-8」の部分はそのページの文字コードにしてください。「EUC-JP」「Shift_JIS」「ISO-2022-JP」「ISO-8859-1」などが使えます。</p>
665    
666     <h3>裏技</h3>
667    
668     <p>属性条件の入力欄に「gstep=1」などとすると、N-gramの検査精度を一時的に変えられます。同様に「tfidf=false」などとすると、TF-IDFの有効無効を一時的に変えられます。</p>
669    
670     <p>検索結果の経過時間表示の右側に「*」マークがつくことがあります。これは、インデックス内に削除文書の情報がたくさんあることによって検索処理が非効率になったことを意味しています。頻繁にこれがでるようになったら、インデックスの最適化を行ってください。</p>
671    
672     <hr />
673    
674     <h2 id="tips">助言</h2>
675    
676     <p>ここでは、アプリケーションとしてのHyper Estraierを活用するためのコツをいくつか紹介します。</p>
677    
678     <h3>大規模なインデックスの構築</h3>
679    
680     <p>文書を登録する処理では、インデックスの内部で持っているデータベースに膨大な量の書き込みを行います。データベースを参照するオーバーヘッドを抑えるために、Hyper Estraierは処理中のデータをメモリ上にキャッシュする仕組みを持っています。キャッシュが大きい方が登録処理は高速になりますが、スワップが起きるとかえって効率が落ちますので、実メモリの4割程度の大きさにするとよいようです。例えば1GBの実メモリを搭載しているマシンで作業をする場合、400MB程度が適切でしょう。</p>
681    
682     <p>estcmdの-csオプションを使うとキャッシュサイズの指定ができます。サイズはメガバイト単位で指定します。デフォルトは64MBです。キャッシュサイズを400MBに指定するには、以下のようにします。</p>
683    
684     <pre>estcmd gather -cl -il ja -sd -cm -cs 400 casket .
685     </pre>
686    
687     <p>インデックスの最大サイズはおおよそ50GBです。また、対象文書がプレーンテキストの場合、インデックスのサイズは対象文書の容量の50%から200%程度になります。HTMLであれば25%から100%程度です。したがって、一つのインデックスに登録できる文書の総量の目安は、プレーンテキストなら50GB、HTMLなら100GBといったところです。なお、インデックスのサイズは、小さい文書が多数あるよりも、大きい文書が少数ある方が小さくなります。また、日本語の文書よりも英語の文書の方が小さくなります。</p>
688    
689     <h3>可用性の確保</h3>
690    
691     <p>インデックスを更新している最中にはロックがかかるので、そのインデックスを使った検索はその間はできなくなります。検索システムとしては、その間は停止時間ということになります。それを避けるためには、インデックスのコピーに対して更新を処理を行い、完了したらオリジナルと入れ換えるようにするとよいでしょう。また、インデックスの更新中に不意にシステムが停止するなどしてインデックスが壊れた場合も、複製に対する更新であれば問題がないので安心です。</p>
692    
693     <p>上述の処理を自動化するには、以下のようなスクリプトを書いておくとよいでしょう。冒頭のexit文は、複製が既に存在している場合(以前の更新に失敗するとそうなります)に処理を停止するようにしています。途中のexit文では、更新したインデックスが壊れた場合に処理を停止するようにしています。</p>
694    
695     <pre>test -e /home/www/casket-copy &amp;&amp; exit
696     cp -R /home/www/casket /home/www/casket-copy
697     /usr/local/bin/estcmd gather -il ja -sd -cm /home/www/casket-copy /home/www/public_html
698     /usr/local/bin/estcmd purge /home/www/casket-copy
699     /usr/local/bin/estcmd optimize /home/www/casket-copy
700     /usr/local/bin/estcmd inform casket || exit
701     rm -rf /home/www/casket
702     mv /home/www/casket-copy /home/www/casket
703     </pre>
704    
705     <h3>文書の削除</h3>
706    
707     <p>gatherやpurgeを実行する際に「-cl」をつけるべきかどうかは運用の仕方によって変わってきます。「-cl」をつけた場合は、転置インデックスを部分的に最適化するので、処理がやや重くなります。ただし、明示的にoptimizeを実行しなくても検索の速度や精度が落ちません。</p>
708    
709     <p>「-cl」をつけない場合は、転置インデックスを更新しないで、文書情報に削除マークをつけるだけですので、比較的に軽い処理で済みます。ただし、検索時に無駄な領域を処理することになりますので、検索の速度と精度が少しずつ落ちてきます。それを解消するために、定期的にoptimizeを実行することが必要となります。「-cl」をつけないで削除した文書の領域を回収するには、optimize以外の手段はありません。</p>
710    
711     <p>通常の運用では、「-cl」をつけてgatherやpurgeを実行するのがよいでしょう。ただし、とても大量の上書きや削除を行う場合には、「-cl」をつけないでgatherやpurgeを実行してから、optimizeを実行する方が効率的です。また、可用性の確保の項目で述べたように、インデックスの複製に対して更新する場合にも「-cl」をつけない方法が適します。optimizeをした方がインデックスが小さく保たれるからです。</p>
712    
713     <h3>類似検索</h3>
714    
715     <p>estseek.confのsmlrvnumを正の数にすると、estseek.cgiで類似検索が可能になります。検索結果の各文書に「[similar]」というリンクが表示されますので、それを選択すると、その文書を種文書とした類似検索が実行されます。なお、estcmdの「-sim」オプションを使うと、コマンドラインからでも類似検索ができます。</p>
716    
717     <p>類似検索を実行すると、候補の各文書のキーワードを計算するので、とても時間がかかります。estcmdのextkeysサブコマンドを用いて予めキーワードのデータベースを作っておくと、類似検索の速度が劇的に向上します。キーワードの選択にはTF-IDF法を用いますので、インデックスを構築する最後の手順で行った方が精度が安定します。したがって、extkeysを含めたインデックスの更新手順は以下のようになります。</p>
718    
719     <pre>estcmd gather -cl -il ja -sd -cm casket .
720     estcmd purge -cl casket
721     estcmd extkeys casket
722     </pre>
723    
724     <p>キーワード用のデータベースはoptimizeを行うと消去されます。したがって、optimizeが必要な場合は、optimizeを先に実行してからextkeysを実行してください。</p>
725    
726     <p>estseek.confにおけるsmlrvnumの値はベクトル空間の次元数を意味しますが、32程度がお薦めです。増やすと精度が上がる代わりに速度が下がります。減らすと精度が下る代わりに速度が上がります。extkeysを実行した場合には、その際の「-kn」オプションの値が次元数の決定に使われます。</p>
727    
728     <h3>文字化け対策</h3>
729    
730     <p>プレーンテキストの文書や、HTMLの文書でmeta要素による文字コードの指定がなされていないものには、インデクシングの際に文字コードが自動判定されます。しかし、自動判定の精度は完璧ではありません。自動判定の誤りによって文字化けが発生した際には、「-ic」オプションで文字コードを明示するとよいでしょう。例えば、「/home/www/public_html/chinese」以下の文書はEUC-CNで書かれていて、「/home/www/public_html/korean」以下の文書はEUC-KRで書かれていることが分かっているならば、以下のようにします。</p>
731    
732     <pre>estcmd gather -cl -ic EUC-CN -sd -cm casket /home/www/public_html/chinese
733     estcmd gather -cl -ic EUC-KR -sd -cm casket /home/www/public_html/korean
734     estcmd gather -cl -sd -cm casket /home/www/public_html
735     </pre>
736    
737     <p>Windows上で「&#x2162;」「&#x2462;」「&#x3326;」などのいわゆる外字を使うことも多いかと思いますが、それらを含んだテキストをShift_JISとして扱うのは避けた方がよいでしょう。文字化けする可能性が高くなります。代わりにCP932もしくはWindows-31Jとして扱ってください。</p>
738    
739     <h3>日本語のパス</h3>
740    
741     <p>日本語などのマルチバイト文字を含んだ名前のファイルを登録することもできますが、文字化けを防ぐためには文字コードを明示することが必要です。estcmd gatherの「-pc」オプションを使います。例えばEUC-JPであると指定する場合は、以下のようにします。</p>
742    
743     <pre>estcmd gather -cl -pc EUC-JP -sd -cm casket .
744     </pre>
745    
746     <p>UNIXではEUC-JPかUTF-8でファイル名を扱うことが多いです。日本語版のWindowsはCP932でファイル名を扱います。「-pc」オプションの値にShift_JISを指定しても期待通りに動作しないことに注意すべきです。Shift_JISの「\」(0x5c)をUTF-8に正規化すると、バックスラッシュでなく円マークになってしまい、区切り文字としての機能が失われるためです。CP932(Windows-31J)は「\」をバックスラッシュとして扱うことが明示されている規格なので、この問題はありません。</p>
747    
748     <p>文書内でタイトルが明示されなかった場合、estseek.cgiは代わりにファイル名をタイトルとして表示します。その場合にファイル名でなくフルパスを表示したい場合は「-pf」オプションも同時に指定してください。</p>
749    
750     <h3>Windows用のフィルタ</h3>
751    
752     <p>Windows用のバイナリパッケージには、xdoc2txtというフィルタプログラムが同梱されています。これをHyper Estraierから呼び出すためのestxfiltというラッパーも同梱されています。それらを使うと、PDF、RTF、MS-Word、MS-Excel、MS-PowerPointなどのファイルをインデックスに登録できます。同梱のコマンドとDLLは全てパスの通った場所に置いてください。</p>
753    
754     <p>例えば、「D:\mikio\doc」以下のファイルを登録したインデックスを作成するには、以下のようなコマンドを実行します。</p>
755    
756     <pre>cd D:\mikio\doc
757     estcmd gather -cl -fx .pdf,.rtf,.doc,.xls,.ppt T@estxfilt -fz ^
758     -ic CP932 -pc CP932 -sd -cm casket .
759     </pre>
760    
761     <p>「-ic」オプションでCP932を指定しているのは、estxfiltの出力の文字コードがCP932であるとわかっているためです。なお、行末の「^」はコマンドプロンプトのエスケープ文字です。</p>
762    
763     <h3>フィルタの作り方</h3>
764    
765     <p>gatherの「-fx」オプションで呼び出されるフィルタプログラムは、好きなように実装することができます。プログラム言語は何でも構いません。第1引数で指定されるファイルを読み込んで、第2引数のファイルに書き込めばよいのです。出力の形式は、文書ドラフト、プレーンテキスト、HTML、MIMEから選択することができます。</p>
766    
767     <p>例えば、MP3のファイルからタイトル等の情報を抜き出すフィルタを考えてみましょう。標準シェルで実装して、mp3infoとiconvを組み合わせることにします。なお、ID3タグの文字コードがISO-8859-1(Latin1)であることを前提としていますが、これは実際に記録している文字コードに合わせて読みかえてください。</p>
768    
769     <pre>#! /bin/sh
770     mp3info -p '@title=%t\n@author=%a\n@type=audio/mpeg\n\n%c\n\t%t\n\t%a\n' "$1" |
771     iconv -f ISO-8859-1 -t UTF-8 &lt; "$2"
772     </pre>
773    
774     <p>上記を「estmp3todraft」という名前で保存して、実行権限をつけて、パスの通った場所に置きます。あとは、以下のコマンドを実行すれば、MP3ファイルをインデックスに登録することができます。</p>
775    
776     <pre>estcmd gather -cl -fx .mp3 estmp3todraft -fz -sd -cm casket .
777     </pre>
778    
779     <p>各種のフィルタが充実すると多くのユーザに喜んでいただけるので、もしあなたが有用なフィルタを作ったなら、Hyper EstraierのMLにぜひ紹介してください。</p>
780    
781     <h3>UIのカスタマイズ</h3>
782    
783     <p>属性検索条件や順序指定の式を手入力するのが面倒な場合、estseek.confのattrselect属性をtrueにしてください。セレクトボックスで指定できるようになります。</p>
784    
785     <p>任意のユーザ属性を表示したいなら、estseek.confのextattr属性を利用してください。</p>
786    
787     <p>入力フォームを変更したいなら、estseek.tmplの中の "&lt;!--ESTFORM--&gt;" の代わりに自分でフォームのHTMLを書いても構いません。その他、JavaScriptやCSSを駆使すればばかなりのカスタマイズができるはずです。</p>
788    
789     <p>CSSやJavaScriptでできないカスタマイズが必要ならば、estseek.cのソースを書き換えて改造してもよいですし、estcmdのXML出力モードを呼び出すスクリプトを書いてもよいでしょう。もちろん、APIを使ったプログラミングをすれば、最も強力なアプリケーションを作ることができるでしょう。</p>
790    
791     <h3>インクリメンタル検索と完全N-gram方式</h3>
792    
793     <p>入力フィールドに文字を打ち込む毎に結果の画面が更新される、いわゆるインクリメンタル検索を行うこともできます。それには、以下の手順を実行してください。</p>
794    
795     <ul>
796     <li>estcmd gatherでインデックスを作る際に、-apnオプションをつけます。</li>
797     <li>`/usr/local/share/hyperestraier/increm/' 以下にあるファイル群をestseek.cgiのあるディレクトリにコピーします。</li>
798     <li>estseek.tmplの中の "&lt;!--ESTFORM--&gt;" を削除します。</li>
799     <li>コピーしたestseek-frame.htmlにブラウザでアクセスします。</li>
800     </ul>
801    
802     <p>-apnオプションは、完全N-gram方式のデータベースを作ることを指示します。完全N-gram方式とは、ヨーロッパ系の言語を解析する際にもN-gram方式を適用するものです。この指示はデータベースを作成する時にしかできません。データベースを作成した後に方式を変更することはできないということです。完全N-gramでなくてもインクリメンタル検索は可能ですが、英文だと単語毎でしか文書がヒットしないので多少不便になります。なお、完全N-gram方式の欠点は、インデックスのサイズが大きくなることと、関連文書検索の精度が下がることです。したがって、インクリメンタル検索を使わない場合は通常の方式が推奨されます。</p>
803    
804     <h3>FastCGI</h3>
805    
806     <p>裏技の範疇に入りますが、estseek.cgiを高速化したプログラムを作ることが可能です。これはUNIX版のみの機能で、FastCGIという規格に基づくものです。FastCGIの実行環境(mod_fcgiなど)とライブラリ(libfcgi)をインストールした上で、Hyper Estraierのソースパッケージの中で「make fcgi」を実行してください。すると「estseek.fcgi」というプログラムが作成されます。これをestseek.cgiの代わりに利用してください。</p>
807    
808     <p>FastCGIスクリプトはCGIスクリプトとほぼ同じインターフェイスでありながら、常駐プロセスになることが特徴です。したがって、プロセスを複製したりDBに接続したりするオーバーヘッドがかからないので、応答時間がかなり短くなります。同時接続数が多いサイトではこの方法はオススメです。FastCGIの詳細については<a href="http://www.fastcgi.com/">FastCGIのホームページ</a>をご覧ください。</p>
809    
810     <p>estseek.fcgiはインデックスをロックし続けるので、Webサーバの稼働中はインデックスを更新することができません。インデックスを更新するためには、estcmdで更新命令を掛けてから、Webサーバを再起動することになります。以下のようにするとよいでしょう。</p>
811    
812     <pre>estcmd gather -cl -il ja -sd -cm casket . &amp;
813     sudo /usr/local/apache2/bin/apachectl restart
814     </pre>
815    
816     <p>スペシャルキャッシュとは、特定の属性の値をキャッシュすることによって処理の高速化を図る仕組みです。estseek.confのspcacheはスペシャルキャッシュの属性名を指定します。例えば、更新日時によるソートを頻繁に行う場合は、@mdate属性を指定しておくとよいでしょう。スペシャルキャッシュの対象に指定できる属性はひとつだけです。スペシャルキャッシュはメモリ上のキャッシュですので、CGIでは機能しません。常駐プロセスであるFastCGIでのみ威力を発揮します。</p>
817    
818     <h3>NFSによるインデックスの共有</h3>
819    
820     <p>NFSマウントのファイルシステム上にインデックスを置く場合には若干の注意が必要です。まず、そのNFSサーバおよびNFSクライアントがロックをサポートしている必要があります。21世紀の実装であれば大抵はロックをサポートしているでしょう。また、NFSサーバのプロセッサとNFSクライアントのプロセッサのエンディアンが一致していることが必要です。</p>
821    
822     <p>以上の条件を満たしているならば、NFSを使って複数のマシンでインデックスを共有することができます。並列化に関する条件は単一のマシンを使っている場合と同じです。すなわち、あるプロセスがライタで接続している間は他のプロセスはリーダでもライタでも接続できず、あるプロセスがリーダで接続している間は他のプロセスはリーダであれば接続できます。</p>
823    
824     <hr />
825    
826     <h2 id="faq">よく聞かれる質問</h2>
827    
828     <dl>
829     <dt>Q. 「Hyper Estraier」はどう発音すればよいですか?</dt>
830     <dd>A. 作者は「ハイパーエストレイア」と発音しています。ちなみに、「estraier」は古いフランス語で「迷う」とか「はぐれる」とかいう意味の言葉ですが、本当の読み方はよく分かりません。</dd>
831     </dl>
832    
833     <dl>
834     <dt>Q. 「Hyper Estraier」と「HyperEstraier」はどちらが正しいですか?</dt>
835     <dd>A. プロジェクト名としては「Hyper Estraier」が公式の名前です。パッケージ名としては「hyperestraier」が使われます。「HyperEstraier」はプログラム内の識別子やHTTPのユーザエージェント名として使われることがあります。</dd>
836     </dl>
837    
838     <dl>
839     <dt>Q. Windows上で動きますか?</dt>
840     <dd>A. 動きます。バイナリパッケージをダウンロードしてください。</dd>
841     </dl>
842    
843     <dl>
844     <dt>Q. ビッグエンディアンもしくはリトルエンディアンのマシン上で動きますか?</dt>
845     <dd>A. はい。どちらでも動作します。ただし、双方でインデックスを共有することはできません。</dd>
846     </dl>
847    
848     <dl>
849     <dt>Q. 64ビットのマシンで動きますか?</dt>
850     <dd>A. はい。問題なく動作します。</dd>
851     </dl>
852    
853     <dl>
854     <dt>Q. EstraierとHyper Estraierを同一システムに共存させることは可能ですか。</dt>
855     <dd>A. はい。可能です。コマンド名やライブラリ名などが重複しないように配慮していますので、互いに衝突することはありません。</dd>
856     </dl>
857    
858     <dl>
859     <dt>Q. Estraierとインデックスの互換性はありますか?</dt>
860     <dd>A. いいえ。互換性はありません。</dd>
861     </dl>
862    
863     <dl>
864     <dt>Q. PDFは扱えますか?</dt>
865     <dd>A. はい。適切なフィルタを組み合わせれば可能です。ただし、暗号化されていたり文字が画像として保存されているPDFからはテキストを抽出できません。</dd>
866     </dl>
867    
868     <dl>
869     <dt>Q. 私の商用製品でHyper Estraierを使ってよいですか?</dt>
870     <dd>A. はい。詳しくは「COPYING.txt」を読んでください。</dd>
871     </dl>
872    
873     <dl>
874     <dt>Q. ビルドに失敗したのですが、なぜですか?。</dt>
875     <dd>A. QDBMとlibiconvとzlibのバージョンが適切かどうか調べてください。Mac OS Xの場合は「make mac」、HP-UXの場合は「make hpux」を実行したか確認してください。ビルドに必要なコマンド(arやldなど)がパスに含まれているかどうか確認してください。それでもダメなら、メーリングリストか作者に報告してください。</dd>
876     </dl>
877    
878     <dl>
879     <dt>Q. バグを発見しました。</dt>
880     <dd>A. できるだけ対応したいので、メーリングリストか作者に報告してください。その際に、開発環境、実行環境、再現手順、エラーメッセージ、ログなど、できるだけ詳細なデータがあると助かります。</dd>
881     </dl>
882    
883     <hr />
884    
885     </body>
886    
887     </html>
888    
889     <!-- END OF FILE -->

  ViewVC Help
Powered by ViewVC 1.1.26