これは、情報検索システムとパーサーの組み合わせの2つのことについてもっと学ぶために私が行った個人的なプロジェクトです。
本質的に、このプログラムは、インデックスとクエリの2つのコマンドを持つREPLです。
リポジトリ、CDをディレクトリにチェックして、「スタックビルド」を実行します
スタック:https://docs.haskellstack.org/en/stable/readme/
スタックは素晴らしいです。スタックを使用します。
2つのオプションがあります。
慌てないで!これは意図したとおりに機能しています。これは単純なREPLなので、プログラムはコマンドを実行するのを待っています。このプログラムは、2つのインデックスとクエリをサポートしています。
インデックスコマンドはドキュメントをインデックス化し、検索の準備を整えます。コマンドは2つの引数を取ります。 1つ目は、整数形式のドキュメントインデックスです。 2つ目は、Whitespaceで区切られた単語のリストです。
いくつかの例コマンド:
インデックスを再利用すると、以前のドキュメントが新しいドキュメントを支持して削除されることに注意してください。したがって、上記のコマンドを実行してからピザを検索した場合、結果は得られません。
単語リストの単語は、文字で構成されている必要があります。数字とシンボルは有効ではなく、エラーが発生します。
クエリコマンドは、以前にインデックスを付けたドキュメントの検索を実行します。最も単純なクエリは一言です。
しかし、彼らはブールの演算子と条件に参加することにより、より高度になり、特定のものになる可能性があります - | (or)and&(and)、ように:
これらのクエリを任意の長さにネストすることができますが、オペレーターを追加すると、クエリの実行に時間がかかります。これは、フルテキスト検索ライブラリがブールクエリをサポートしておらず、単なる用語検索のためです。したがって、このアプリケーションは(ユニオンまたは交差点のいずれか)に、結果のインデックスリストを手動で結合する必要があります。
また、各用語はパレンズにネストする必要があることに注意してください。あなたがLispの奇妙なバリアントにいるふりをすると、あなたは大丈夫でしょう。
空のコマンドを入力するだけです。 Ctrl-Dも動作します(EOF)。