S.CREWって何ですか?
1997年2月28日現在、Sony Driveで使用されている検索エンジンの名前です。
S.CREWという名前は、
SonyDrive Search Engine
Sony Search Engine
Simple Search Engine
などに由来しています。README-jの最後の部分も参考にしてください。
S.CREWは、perlで記述されたとても単純な検索ツールです。デーモンプロセスは
使用せず、単なるWWWサーバのCGIプログラムとして動作します。また、いくつか
のフリーソフトウェアを使用します。
S.CREWを使用するには、あらかじめ検索の準備が必要です。
- 1)検索対象となるファイルから単語を抽出し、
- 2)その単語とファイルの識別子をペアにして
- 3)単語をキーとして文字コード順にならべて記録
することによって転置ファイル(inverted file、index fileとも呼ばれる)を
作成します。 DBMなどのハッシュ関数は用いず、テキストファイルだけでデータ
ベースが実現されています。従って、データベースが壊れているかどうかは、特
殊なツールを使わずにチェックすることができます。
検索時には、
- 4)キーワードを受け取った後、
- 5)そのキーワードで始まる単語を2分探索法によって探し、
- 6)その単語を含むファイルの番号から、URLを再構成してユーザに返す。
という手順を実行します。
検索スピードのためには、単語と元のファイルとをDBMなどのハッシュ関数で
取り出すほうが良いのですが、DBMは書き込みが遅いのと、テキストファイルの
操作ツールが広く使えるために、DBMを使わない方法で実現しました。S.CREWは、日々
データを更新/追加していくようなデータベースを目指しているので、このよう
な実現方法を選択しました。それでも、数百MB程度のテキストファイル(htmlも
含む。以後text/htmlファイルと表記)であれば、十分に実用的な検索スピード
が得られます。
本当に検索スピードが必要になったら、これらの機能をCや、perlでもDBMを使
用する方法で書き直してみればよいでしょう。
1.0から1.1への変更で、何が変わったのですか?
1.0から1.1への変更点は、以下のとおりです。
- longフォーマット指定時には、本文の最初のほうを紹介する。
- 検索件数が少ない(今は0の)時、またはlistkeyフォーマット指定時
には、前後のキーワードを表示する。
- perl5対応でjcode.plを使う。特定のJISコード入力に対して文字化け
するバグを修正。
perl5対応に伴い、S.CREWが内部的に扱う文字コードはEUCのみとしました。これ
まで、転置ファイルなどをShift-JISで作成していた場合は、indexingをやり直
さないと使えません(文字コードを変換しただけでは正しく動作しない場合があ
るでしょう)。
また、config.plなどで使用する変数も増えました。1.1のconfig.plを1.0で使
用するのは可能ですが、1.0のconfig.plを1.1で使用しても、正しく動作しませ
ん。
その他、S.CREWから呼びだされるいくつかのフリーソフトウェアは、同じものを
変更せずに使用することが可能です。
S.CREWはどういうシステムで動きますか?
S.CREWは、現在のところ、UNIX + httpd + perlという環境でのみ、動作します。
MacintoshやWindows/NTなどで動作させたという報告は、この文書執筆時点では
一切ありません。
UNIXは、NEWS-OS 4.2.1Rで動作確認を行なっています。S.CREW-1.0はさらに、
Linux、Solarisなどで動作したという報告を受けていました。
httpdは、Apache-1.1.1を使用して動作チェックを行なっています。
perlは、以下のバージョンで動作チェックを行なっています。
-----------------------------------------------------------------------------
This is perl, version 5.003_20
Copyright 1987-1996, Larry Wall
+ suidperl security patch
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5.0 source kit.
-----------------------------------------------------------------------------
インストールは大変じゃないですか?
S.CREWのインストール自体は難しくはないはずです。S.CREWはperlのスクリプトとし
て提供されており、コンパイルの必要がなく、どこに転置ファイルを置けば良い
かなどを、テキストエディタでconfig.plファイルに書き込めばおしまいです。
しかし、S.CREWが使用しているいくつかのフリーソフトウェアをインストールす
るのには手間がかかるかも知れません。それらのソフトウェアのインストールは、
それぞれに付属のドキュメントを参照してインストールしてください。
検索スピードはどれくらいですか?
大抵は3秒以内で検索が終了するでしょう。参考までに、検索が終了した時点
で消費したCPU時間(1/60秒単位)と、経過した時間(1秒単位)を表示していま
す。これは、キーワードを受け取り始めた時から、検索結果のリスト表示を終え
るまでの時間であって、単なる検索時間だけではありません(ネットワークでの
転送時間は含みません)。
しかし、頻繁ではないですが、検索結果として出力するファイルの数が多いと、
7〜8秒程度かかることもあります。
検索アルゴリズムは通常、以下のように、早さの順番は決まっているものです。
線形探索 < 2分探索 < ハッシュ探索
ハッシュ探索を使用する例は世の中にたくさんあり、UNIX上ではDBMという一
般的なツールが用意されています。しかし、S.CREWでは、取り扱いのしやすさ、頻
繁な indexingにも耐えられる更新スピードを考慮して、2分探索を採用していま
す。
「大抵は3秒以内で検索が終了する」というのも、巨大なデータベースになっ
たときのスピードではありません。数百MBを超えるようなtext/htmlファイルに
対してはテストしていません。もし検索(だけ)のパフォーマンスを追及するな
らば、ハッシュ探索を採用することも考えられてよいでしょう。
それでも遅いと感じる場合には、Cなどのコンパイラ型言語でバイナリプログラム
を作成すればよいでしょう。それでも遅ければ、いちいちプログラムを起動する
必要のないデーモンプロセスを動作させるようにすればよいでしょう(Cで書か
れ、デーモンプロセスを動作させるfreeWAISというフリーの検索ソフトウェアも
あります)。
それらの高速化手法をとらず、扱いやすいプログラムを目指したのが現在の
S.CREWです。
indexingのスピードはどれくらいですか?
64MBメモリのNWS-5000WN(R4400SC 67MHz)で、40MB(1600以上のファイル)
を20分ほどで処理しています。WAISのindexingよりは長めですが、DBMを使うよ
りは早いです。
どれくらいのディスク容量を必要としますか?
データにもよりますが、text/htmlファイルの総量とほぼ同じ程度のディスク
領域を消費することを覚悟しておいてください。転置ファイルを更新するときに
は、使用中の転置ファイルと、新たに作っていくファイルとで、text/htmlファ
イルの容量の倍程度必要となる場合があります。
ただし、上記の数字は飽くまで目安であって、こちらの環境では、40MBのデー
タに対して、転置ファイルは(HTML.invとHTML.flist合わせても)3MB以下で作
成されています。
フリーソフトウェアで辞書などを用いる場合には、その容量も考慮しなければ
ならないでしょう。
S.CREWが呼びだしているフリーソフトはどこから入手できますか?
S.CREWが呼びだしているフリーソフトウェアは、通常のUNIXで標準に添付されて
いるコマンドを除けば、以下のようなところから入手できます。Linuxでは伝統
的に、sortやgrepなどのコマンドはGNUのものを使用しているので楽でしょう。
なお、これらのソフトウェアは、それぞれ別の方によって作成されたものです。
S.CREWとは著作権などの使用条件が異なる場合がありますので、注意してください。
また、このリストはあくまで参考例として挙げるもので、私達が確実にこれらの
サイトからダウンロードしたソフトウェアで、動作を確認したことを意味するも
のではありません。
- perl5
- ftp://ftp.lab.kdd.co.jp/lang/perl/CPAN/src/5.0/perl5.003.tar.gz
- GNU sort
- ftp://tron.um.u-tokyo.ac.jp/pub/GNU/prep/textutils-1.22.tar.gz
- GNU grep
- ftp://tron.um.u-tokyo.ac.jp/pub/GNU/prep/grep-2.0.tar.gz
- lynx
- ftp://ftp.lab.kdd.co.jp/infosystems/lynx/jp/lynx-2.3jp092.tar.gz
- ftp://ftp.lab.kdd.co.jp/infosystems/lynx/old/lynx2-3.tar.Z
- kakasi
-
ftp://ftp.kusastro.kyoto-u.ac.jp/pub/baba/wais/kakasi-2.2.5.tar.gz
-
ftp://ftp.kusastro.kyoto-u.ac.jp/pub/baba/wais/kakasi-ext.tar.gz
- nkf
- ftp://ftp.iis.u-tokyo.ac.jp/pub9/unix/Kanji/nkf-1.5.shar.gz
jperlは持っていないけれど、動かせますか?
S.CREW-1.0はjperl-4.035を前提に書かれたプログラムだったので、jperlを持っ
ていない場合は、ちょっと変更しなければ動作しませんでした。が、S.CREW-1.2に
なって、perl5対応になったので、jperlがなくても動作するようになりました。
perl5は持っていないけれど、動かせますか?
残念ながら、S.CREW-1.2は、perlのversion 5でないと正しく動作しません。機能
は落ちますが、これまでのS.CREW-1.0を使って我慢するか、perl5をインストールし
てS.CREW-1.2 を使用してください。
WAISと比べると使いやすいですか?
まず、私達は製品となっているWAISは一切触ったことがないので、比較するこ
とができません。
freeWAIS-sfと呼ばれるWAISの派生プログラムも、最近のものは知りません。
freeWAIS-sf-1.0では、make自体が難しく、中のプログラムも複雑で、カスタマ
イズ等が難しかったという印象があります。最近は改善されているかも知れませ
ん。
1.1ではなぜShift-JISを内部コードとして使わないのですか?
S.CREW-1.2では、内部のコードはEUCに統一しています。Shift-JISだと、1バイト
ずつ文字列を処理するときに、あるバイトデータが2バイト文字の一部なのかそ
うでないのかが簡単には判別できず、プログラミングが非常に大変になるからで
す。また、最近のperlはほとんどがバージョン5以降であり、jperlのように特別
な日本語パッチがあてられていることも、多くはありません。従って、perl5で
も1バイトコードと2バイトコードが容易に判別できるEUCを内部コードとして採
用しました。
ユーザからのキーワード入力も、すべてEUCに変換して処理しています。
1.0と1.1では、データやconfig.plファイルの互換性はありますか?
ほとんど互換性はありません。ただし、S.CREW-1.0で作成されたHTML.invファイ
ルや HTML.flistは、 EUCに文字コードがそろえられていれば、それなりに使用
できます。1.1 で追加されたlongフォーマットの検索結果出力は正しくはなされ
ません。
config.plも、S.CREW-1.2のものを使わないと、S.CREW-1.2に含まれるプログラムは
正しく動作しません。
いずれにせよ、S.CREW-1.2では、転置ファイルもconfig.plファイルも、1.1のも
のを使用してください。
S.CREWはちゃんとサポートしてもらえますか?
サポートは一切提供されません。この文書の末尾付近に示されている S.CREW管理
者用のメールアドレスにメールを送られても、返答は保証されません。
ただし、GNU General Public Licenseに記述されている範囲内で、独自にサポー
トする人が現われるのを、私達は妨げるわけではありません。
また、サポートが必要ならば、元々サポート体制が確立している市販のソフト
ウェア(弊社MediaFinderや他社製品など)を使用するほうが良いでしょう。
ロボットと一緒に動かして、サーチエンジンサイトを構築できますか?
できます。ただし、S.CREWは完全にはロボットと一体化されてはいないので、多
少はカスタマイズすることが必要かも知れません。
また、使用するロボットプログラムが効率的かどうか、あるいは「正しい」ロ
ボットの動作を行なうプログラムかどうかは、私達は一切感知しません。ロボッ
トは、間違った運用をすると、大きな迷惑をインターネットに対して与えること
がありますので、注意してください。
動かないんですけれど?
このようなメールを頂いても、こちらは答えようがありません。このようなメー
ルが来ても、私達は無視します。
何が動かないのか、どこでどういう環境(端末の種類、端末のOS、検索ページ
のURL、キーワードの種類、実行したプログラムの種類、実際に動かないプログ
ラムの名称、実行した時刻、等々)で、何を実行したのか(インデクシングプロ
グラムか、検索プログラムか)などを明確にして質問してください。
もちろん、細かく症状を述べられても、私達からの返答が保証されるわけでは
ありません。
インストールしたのに、日本語キーワードで検索できないのはなぜ?
英数字での検索はうまくいっているのですね?とすれば、考えられる症状と、
その対策には、以下のようなものがあげられます。
-
config.pl内で、sortコマンドのオプションを勝手にいじってしまい、
HTML.invファイル内の単語が正しく文字コード順にはソートされていな
い(HTML.invファイルはテキストファイルであり、チェックは容易にで
きる)。漢字が含まれているとすれば最後のほうにまとまっているはず
だが、実際にはそうなっていない。
→config.pl内で、sortコマンドのオプションを元に戻す。
-
config.pl内で、lynxやkakasiのコマンドのオプションで、文字コー
ドを正しくEUCにそろえていない、または、kakasiのオプションが環境
によって違う動作をすることがある。
→config.pl内のそれらのコマンドのオプションを元に戻して、転置ファ
イルを作成し直す。特にkakasiの-ieucオプションはつけないほうがよ
い場合があり、試してみないとどれがよいかは判断できない。また、
"-J -w"という順番よりは、"-w -J"という順番でオプションを指定した
ほうがよい場合がある。
-
S.CREW-1.0の頃のHTML.invファイルがShift-JISのコードを使用していた
のに、S.CREW-1.2のEUCでの単語インデックスを追加した。
→S.CREW-1.2用に転置ファイルを最初から作り直す。
-
S.CREW-1.2をjperlで動かそうとした。
→S.CREW-1.2はperl5で動かす。
-
S.CREW-1.2のUPDATE/config.plを正しく編集し、UPDATE/mkindex.plコマ
ンドで転置ファイルを作成したのにもかかわらず、S.CREW-1.0のsjis環境
のままsearch.plコマンドで検索しようとした。
→search.plコマンドはUPDATEディレクトリのconfig.plを参照しません。
config.plとUPDATE/config.plは別々に編集しましょう。
ほかにもいくつか理由が考えられますが、英数字は検索できているのですから、
もうちょっとで日本語も検索できるようになるはずです。頑張ってください。
フリーソフトはバージョンが違っても大丈夫?
こちらで実際に使用している各フリーソフトウェアのバージョンは、README-j
に書いたとおりですが、kakasiを除けば、多少はバージョンが違っても、S.CREWは
支障なく動くでしょう。使用するソフトのバージョンによって、オプションの指
定の仕方などが、違っている可能性があります。
kakasiは、-wオプションを理解するパッチが2.2.5用にしか存在していないの
で、それ以外のバージョンでは、動作させることが難しいかも知れません。また、
nkfをもし使うならば、1.5以上でないと、-Zや-mオプションは使えないかも知れ
ません。
sortやgrepは日本語パッチがなくても大丈夫?
現在のところ、この2つのコマンドには日本語パッチをあてなくても、S.CREWは動
作しています。現に、私達はGNU sortには日本語パッチがあたったという話を知
りません。grepはURLをファイルリストから抽出するときにしか使ってないので、
URLに日本語が使われないかぎりはGNU grepにも日本語パッチは不要でしょう。
こちらではGNU grepには日本語パッチをあてていますが、何かと便利だから、
ということ以上の理由はありません。
人名その他の単語が変に分割されるんだけれど、直せないの?
単語の分割は、kakasiというプログラムが受け持っています。このkakasiの辞
書を適切に整備することによって、ある程度直せるでしょう。
kakasiの辞書は、jserverの辞書から、jserver付属のdtoaコマンドを用いて変
換することなどによってカスタマイズが可能です。詳しくは、kakasiのパッケー
ジに含まれるJISYO ファイルを参照してください。
ただし、そうやって辞書を整備していっても、kakasiは片仮名だけ、あるいは
平仮名だけの文字列はまとめて一つの単語として見る傾向があります。これは
「変に分割される」というよりも「正しく分割されない」と言うべきなのですが、
いずれにせよ、今後の課題でしょう。
kakasiをやめて、
ChaSen
など、ほかのプログラムを使用することでも、単語の分割をより自然に行なうこ
とが可能かも知れません。
NetNewsの記事などにも応用できますか?
できます。特に、NetNewsなどの記事は、前回の更新から新しく届いた記事だ
けを追加して検索できるようにする、という様な操作に向いており、S.CREWに向い
ているデータと言えるでしょう。ただし、そのように「新着の記事だけ」追加す
るプログラムは、UPDATE/update.plを変更するなどして、ユーザが作成しなけれ
ばなりません。また、数百MBを超える大容量のデータベースが作成されたときに
も、それ以下の容量の時と同様の検索スピードが出るとは限りませんので、注意
してください。
text/htmlファイルしかだめなのか?PostscriptやPDFには対応しないの?
S.CREWは、現在のところ、text/htmlしか扱いません。PostScriptやPDFから正し
く(日本語も含めて)テキストデータを抜き出すことができれば、config.pl内
の$FILTERの値を変更することで比較的容易に対応できるはずです。しかし、現
在は、(特にPDFについて)そんなに便利で確実なツールがないので、対応がで
きていません。
検索結果として見えるURLのパスを変更したいのだが?
そういう場合にも、S.CREWのテキストデータによるインデクシングが効力を発揮
します。HTML.invファイルとHTML.flistファイルは、ファイル番号の対応が取れ
ていればよいので、HTML.flistの中身を直接変更すればよいのです。
また、もうちょっとエレガントな方法としては、config.pl内で%LOCAL_URL変
数を設定する方法もあります。ftpdとhttpdで同じディレクトリを共有していた
場合、ftpのパス名はすべてhttpでアクセスさせれば良いのです。%LOCAL_URLの
使いかたは、README-jをご覧下さい。
転置ファイル(*.invファイル)の内容が文字化けしているのは、なぜ?
kakasiで-ieucオプションを付けていませんか?kakasi-2.2.5 + パッチで、
-ieuc オプションを付けていると、文字化けする症状がこちらでは発生しました。
-ieucオプションを削除して再度転置ファイルを作成し直してください。
また、正常に作成されているのに、端末側がShift-JISの環境であった場合、
文字化けしているように見えることがあります。その場合には、正しい環境を設
定してください。
ちょっと前まで、入力したキーワードが化けることがあったけれど?
S.CREW-1.0では、入力したキーワードによっては、文字化けが発生することがあ
りました。場合によっては、セキュリティホールになると指摘した人もいらっしゃ
いました。
S.CREW-1.2では、このようなことがないように修正されています。これまで
S.CREW-1.0を使用していた皆さんにも、この点を考慮していただき、速やかに
S.CREW-1.2に移行されることを強くお勧めします。
フィールド指定検索はできないの?
現在のところ、S.CREWはリレーショナルデータベースではなく、フィールド指定
検索はサポートしていません。フィールド指定に近い機能としては、URLのパター
ンを指定して、特定のファイルだけを検索できる、カテゴリー検索とも言うべき
機能が実現されている程度です。
tar.gzファイルの解凍の仕方を教えて!
このファイルを読めているということは、tar.gzファイルを展開(解凍)でき
たということかも知れませんが、tar.gzというのは、tar というコマンドとgzip
というコマンドを使用して作成されたことを意味しています。tarもgzipもUNIX
のユーザには一般的なコマンドですが、S.CREW-1.2.tar.gzファイルは、以下のよう
にして展開します。
gzip -dc S.CREW-1.2.tar.gz | tar xvf -
これだけで、このコマンドを実行したディレクトリで、S.CREW-1.2のパッケージが
展開されます。
なぜconfig.plがUPDATEディレクトリにもあるの?
UPDATEディレクトリがUPDATEという名前ではなく、このディレクトリごと、全
く別の名前のディレクトリに移動してもいいように、別のconfig.plファイルを
用意しておきました。もちろん、その場合には、mkindex.plなどのrequire文を
変更しなければなりません。
mkindex.plは、しばしばテストをしたくなるプログラムです。このテストを、
正常に動作しているS.CREW-1.2とは独立して行ないたい場合がしばしばあると思わ
れたので、UPDATEという別のディレクトリにもconfig.plを置いてあります。
UPDATEディレクトリには、update.plというプログラムも置かれています。こ
れを実行すると、すぐ上のディレクトリのデータベースを更新してしまいます。
単なるテストの時は、mkindex.plだけを実行するようにしましょう。
会社内や営利目的のWWWサイトで使ってもよいですか?
GPL Version 1に従うかぎり、どこで使用しても構い
ません。第三者から聞かれた場合には、このプログラムがソースコードごと無償
で提供されていること、著作権等の権利をソニー(株)が保持していること、入
手できる場所はどこかなどを伝えることができなければなりません。いちいち回
答するのが面倒な場合には、このプログラムの実行結果などの画面から、このプ
ログラムのダウンロードできる場所を明示しておけばいいでしょう(検索結果表
示画面にHTMLのアンカーがなければならない、というわけでもありません。
GPL Version 1を良く読んで臨機応変に願います)。
kakasi以外の単語分割ソフトはないのですか?
20. でも触れましたが、
ChaSen
という、以前のjumanというプログラムの発展
したプログラムがあるようです。jumanよりもスピードなどが向上していると言
われています。是非トライしてみてください。S.CREWでの利用に適しているかは、
こちらでは評価しておりません。
同義語辞書は使わないのですか?
現在のところ使っていません。indexingの時点で類義語、同義語を合わせて記
録できればよいのでしょうが、そうなるとデータが増えてしまいます。また、文
脈によっては同義語かどうかが変わってしまう場合があります。
また、検索時に同義語を展開してそれぞれの同義語をキーワードにして検索す
る場合も、その同義語の個数分だけ検索時間がかかってしまいます。
将来的には必要かも知れませんが、現在のところは、特に考えておりません。