0

本を検索して、特定のキーワードを含むすべてのページと行を一覧表示できるアプリケーションを開発する必要があります。

章と節ごとに分割されている聖書など、他の方法で分割されている本の場合。特定のキーワードを含むすべてのを検索できます。または、特定の章や節内でキーワードを検索します。

本はどのような形式で保存すればよいですか? SQL データベースに格納する必要がありますか?

保存するのに最も簡単な形式とは対照的に、検索するのに最も簡単な形式はどれですか?

4

7 に答える 7

3

それは、実行する環境と、1 秒あたりに予想されるクエリの数によって異なります。

最も速いのは、ハッシュテーブル内のすべての単語をメモリに格納することです。値には、取得したい章/詩への参照、またはそれを呼び出すものは何でも含まれています。

ただし、ブックが非常に大きい場合、またはクライアントが非常に薄い場合、これはうまくスケーリングできない場合があります。

すべての節をデータベース レコードに保存し、全文検索で検索できます。ただし、Web サイトでアプリをホストする必要がある場合は、選択したデータベースのホスティング コストが予算を超えないようにする必要があります。

アプリケーションの負荷がそれを処理できる場合は、すべての詩をテキスト ファイル (プレーン テキスト、XML、またはその他の形式) に保存し、できれば XPATH または正規表現を使用して各ファイルをスキャンすることもできます。非常に安価で簡単なソリューションで、好きなだけ高度にすることができますが、おそらく遅くなります。繰り返しになりますが、1 時間に 1 つのリクエストのみを処理する必要がある場合は、なぜですか?

全文検索でデータベースを使用します。これが最適なスケーリングであるためです。

于 2009-07-29T13:12:40.263 に答える
2

何年も前に、あなたが話しているのとまったく同じアプリケーションを作成するために使用した Access データベースに既に保存されている聖書がありました。Access DB は無料でダウンロードできました。数年前、私は XML で見つけました。職場からはできませんが、Access Bible または XML Bible を検索して、見つけられるかどうかを確認することをお勧めします。(元の Access は ASP Bible と呼ばれていた可能性があると思います)。いずれにせよ、それを見つけることができれば、データベースをどのように構築できるかについての良いアイデアが得られるはずです。

于 2009-07-29T13:09:37.693 に答える
2

プログラムは任意の本を検索しますか、それとも特定の本だけを検索しますか? 聖書以外の本には、聖書のように章と節に分かれた内容はありません。答えは、その本が現在どのような形式であるかによって異なります。

于 2009-07-29T13:09:59.033 に答える
2

Lucene.NETのような既製のフル テキスト エンジンを使用することをお勧めします。自分でやった場合には得られないあらゆる種類の機能を得ることができます。

于 2009-07-29T13:10:49.983 に答える
0

Boyer-Moore (また、これには元の論文へのリンクが含まれています) アルゴリズムを調べることができます。

残念ながら、Boyer-Moore アルゴリズムは、短い「キーワード」検索よりも長い文字列の方がはるかに高速です。そのため、キーワード検索では、検索用語の可能性が高いインデックスを作成できるある種のクローラーを実装することをお勧めします。

別の厄介な考慮事項は、ほとんどの本では章が特定のページにのみ含まれているのに対し、聖書では、章と節が複数のページに分割され、ページに複数の節と章が含まれる可能性があることです.

つまり、テキストを詩ごとに分割すると、詩の境界をまたぐ検索フレーズには結果が表示されません (または間違った結果が返されます)。

さらに考慮すべきことは、正確な検索フレーズが必要かどうか、またはキーワードのグループだけが必要かどうかなど、近接検索です。

最初の最も重要なタスクは、要件を掘り下げて強化することだと思います。次に、書籍を受け取る形式を決定する必要があります。制約がわかれば、アーキテクチャ設計の決定を開始できます。

于 2009-07-29T13:49:24.183 に答える
0

同じ本に対して複数のクエリが予想されますか? つまり、多くの時間がかかるブックごとの前処理を実行したいのですが、ブックご​​とに 1 回だけ実行する必要がありますか? それ以外の場合は、ボイヤームーアがおそらく最善の方法です。完全な単語のみを検索しますか、それとも単語の先頭も検索しますか? 完全な単語の場合、単純なハッシュテーブルがおそらく最速です。単語の一部を探したい場合は、接尾辞ツリーをお勧めします。

使用しているアルゴリズムがわかっている場合は、最適なデータ構造 (データベース、フラット ファイルなど) を決定する方が簡単です。

于 2009-07-29T13:23:18.510 に答える
-3
def findWord(keyword):
    f = open("book.txt")
    for line in f:  # horribly bad performance for a large block of text
        if line.find(keyword) > -1:
            print line

特定の聖書の例のテキスト ブロックを各行に置き換えます。テキストをどのように保存するかは本当に重要ではありません。あなたがしているのは、特定のテキストを検索することだけです (ほとんどの場合、ループ内で)、キーワードを探します。

行番号やその他の任意のフィールドを検索する場合は、関連するフィールドを含むデータベースに情報を保存し、関連する任意のフィールドで検索を実行することをお勧めします。

参考までに - 上記のコードは Python です。

于 2009-07-29T13:10:59.267 に答える