4

オンライン聖書検索プログラムを開発しています。聖書は非常に大きな本で、プレーン テキストで 5 MB 近くのスペースを占有します。プログラムに API を実装し、他の Web サイトが検索クエリを開発したり、独自のサーバーに聖書を保存したりすることなく、独自の聖書検索ウィジェットとプログラムを含めることができるようにすることを計画しています。

これを念頭に置いて、最終的にプログラムを通過するクエリのフローが適度になると予想します。また、聖書に精通していない人のために、テキストをフォーマットする 2 つの方法があります。赤いテキストと斜体の両方を含めることができます。赤い文字とイタリック体の書式設定と共に聖書を保存する方法が必要ですが、検索クエリで書式設定を無視できるようにする必要があります。

また、可能な限り高速で効率的 (メモリと CPU の使用) である必要があります。フォーマットを無視してクエリを実行できる限り、任意のストレージ フォーマット (MySQL、JSON、または XML テキスト ファイルなど) が考慮されます。ファイルのサイズと数はそれほど重要ではないので、本や章を別々のファイルに分割しても問題ありません。

ただし、覚えておくべきもう1つの重要なことは、複数の詩を検索できる何らかの形式の検索方法が必要だということです. したがって、「しかし、神のために永遠の命が彼の息子ではなく送られた」を検索すると、ヨハネ 3:16,17が返されます。すべてのアイデアをありがとう!

4

2 に答える 2

4

あなたがやろうとしていることを正確に実現するために作られた、さまざまなオープンソースのドキュメント検索エンジンがたくさんあります。Solr、Elastic Search、Xapian、Whoosh、Haystack(Django用に作成)など。SOや他の場所に、相互に使用することの利点を説明する投稿が他にもありますが、要件は十分に単純なので、どれも問題ありません(プロジェクトが軌道に乗れば、最小限の労力で簡単に拡張できます。常に知っておくと便利です)。したがって、それらの例を見て、どれが最も直感的に見えるかを確認してください-Solrは間違いなく最も人気があり、私が使用した唯一の例ですが、Elastic Searchは同じ人気のあるLuceneバックエンドを使用しており、明らかにはるかに簡単に起動できます実行しているので、そこから始めます。

実際の実装に関しては、単一の詩(または単に詩の番号)が返されるものである場合は、各詩を個別の「ドキュメント」としてインデックス付けする必要があります。検索エンジンは、関連性に基づいて結果のランキングを処理します(興味がある場合は、通常、tf / idfアルゴリズムを使用します)。

イタリックと赤のテキストを処理する方法は、テキストに何らかのマークアップを含めて(つまり、イタリックの場合は1つのアスタリスクで、赤の場合は2つのアスタリスクでフレーズをラップする)、アナライザーにそれらの文字を無視するように指示することです。ただし、フレームワークでより簡単な方法を選択することになります。そのため、一粒の塩でそれを取ります。複数の詩の要件にまたがるクエリはより複雑ですが、答えはおそらく、各詩の代わりに(またはそれに加えて?私はそれについてもっと考える必要があります)、各章全体をドキュメントとして索引付けすることを含みます。

注意点-検索インデックス作成に慣れていない場合でも、Elastic Searchのようにプラグアンドプレイで設計されたものでも、セットアップにある程度の時間と労力が必要になる可能性があります。これをすばやく起動して実行し、MySQLに既に精通している場合は、機能する可能性があります(全文検索を実行します)。しかし、それは確かに仕事に最適なツールではないので、これがあなたが投資しているプロジェクトである場合、これらの検索フレームワークの1つを学ぶために少しの作業を行った場合は後で自分自身に感謝します。他の人が指摘しているように、あなたが扱っているテキストの量に関してはやり過ぎかもしれませんが、あなたが望むように見えるそのテキストを検索する方法は非常に柔軟です。たとえば、後で他の要件を追加するのは非常に簡単です(たとえば、検索を赤いテキストの一致のみに制限することができます)。

于 2011-09-18T01:30:43.900 に答える
2

聖書に書式があるとは知りませんでした。それは何のために使用されますか?詩の場合は、すべての詩をデータベースに保存することをお勧めします。高度に正規化された形式では、本を含む表、章を含む表、詩を含む表が得られます。各詩は、詩番号と詩のテキストで構成されています。

さて、チャプターにはタイトルがないので、実際には単なる番号だと思います. その場合、それらを別々に保存するのはばかげているので、本のテーブルと詩のテーブルだけを取得します。各詩には、章番号と詩番号と詩のテキストがあります。私が考えるそのテキストはプレーンテキストですね。

詩がプレーン テキストの場合は、MySQL に保存して FULLTEXT インデックスを作成することで、簡単に検索可能にすることができます。そうすれば、非常に効率的に検索でき、ワイルドカードなども使用できます。

詩に書式を設定する場合は、検索用のプレーン テキストと表示用の書式設定されたテキストの 2 つの列を作成することを選択できますが、これが必要になるとは思えません。

PS: 5 MB のテキストは実際には何もありません。専用のプログラムを入手した場合は、それを単一の文字列でメモリに保持し、strposまたは同様の関数を使用してテキストを見つけることができます。どの言語、データベース、プラットフォームを使用していますか?

于 2011-09-18T00:02:50.320 に答える