数千ページの新聞記事をOCRedしています。各ページの新聞、号、日付、ページ番号、OCRed テキストは、mySQL データベースに格納されています。
ここで、Google のような検索エンジンを PHP で構築して、クエリが与えられたページを見つけたいと考えています。高速で、検索に 1 秒もかからない必要があります。
どうすればいいですか?
数千ページの新聞記事をOCRedしています。各ページの新聞、号、日付、ページ番号、OCRed テキストは、mySQL データベースに格納されています。
ここで、Google のような検索エンジンを PHP で構築して、クエリが与えられたページを見つけたいと考えています。高速で、検索に 1 秒もかからない必要があります。
どうすればいいですか?
SphinxSearchを試すこともできます。Craigslist は sphinx を使用しており、mysql と postgresql の両方に接続できます。
興味深い検索エンジンがいくつかあります。「Google のように」の意味がわからないので、その部分は無視します。
すべてのファイルを Google ドキュメントに置き、その結果を自分の Web サイトにスクレイピングすることができます。
私の懸念は、OCR の精度がまだ問題であることです。そのため、検索要件の 1 つの考慮事項は、「あいまい」検索を実行する機能です。OCR が "hot" に対して "hat" という単語を誤って認識した場合、検索エンジンは十分に賢く、類似しているが正確ではない結果を返します。Oracle には、2 つの文字列の類似性を比較するUTL_MATCHという関数があります。
このような機能があれば便利です。
あなたのシナリオは、自分でロールバックしたいことを示唆しています。一般的な検索エンジンの出発点としては、次のものが含まれます。
市販のソリューションを使用する場合:
Google 検索アプライアンスや Google Enterprise などを試してみませんか? 関連するコストがかかりますが、車輪を再発明する必要がなくなり、「google like」検索が可能になります。
Sphiderを確認することをお勧めします。私の経験では、それは非常に高速で、インデックス作成を自動的に行います。また、オープン ソースであるため、コードを取得して必要に応じて変更することもできます。
sqlite には非常に優れた全文検索機能があります (sqlite FTS 3/4 を参照してください - 驚くほど優れています)。
シンプルなPHP diyアプローチが必要な場合は、索引付けされている用語のハッシュで分割された多数の小さなファイルを使用して索引付けを行うと、非常にうまく機能し、設計に注意すればphpでも検索が非常に高速になります。(アイデアは、ハッシュとレコード ID に一致する用語を含む非常に小さなファイルを検索する必要があるだけの用語を検索することです。HD スペースを節約したい場合は、bitarray スライスを使用してレコード ID を表すことができます) ..しかし、全文のすべての単語のインデックス作成はphpでは遅くなります..その部分は実際にはcで行う必要があります
「ファジー」検索の場合は、メタフォン ハッシュの使用を検討してください。
ビルド済みのフルテキスト ツールについては、以下をチェックしてください: sqlite FTS 3/4 (sqlite には非常に優れたフルテキスト検索機能があります!)、Sphinx、kinoSearch (kinoSearch は Lucene に少し似ていますが、バックエンドは C で、使いやすい perl ラッパーを備えています - cLucene もありますが、それはまだプレアルファだと思います)
Java Lucene (または Java ベースのもの) は、おそらく JVM を実行するために大量の RAM を確保する必要があります。