F# で全文検索エンジンを構築する方法の良い例 (Web サイトまたは本) はありますか?
2 に答える
これを自分で書きたいですか?それとも単にその機能が必要ですか?
この機能が必要な場合は、全文検索をサポートする埋め込み/メモリ内データベースがうまくいくかもしれません。.Net であるため、オープン ソースの候補としてSQLite ADO.Net Providerをお勧めします。これは非常に優れており (他のどのプロバイダーよりも先に LINQ をサポートし、設計時のサポートなど)、FTS サポートは非常に活発に開発されています。Googleはそれに取り組んでいると思います。VistaDB データベースもあります。今は主にそれを使っています。FTS をサポートする必要があります。完全に .Net であるため、統合の利点がいくつかあります。
自分で行う必要がある場合は、情報検索に関する書籍を参照してください。私はいくつか読んだことがありますが、群衆から際立っているものは何も知りません. アマゾンはそこに役立つかもしれません。
ほんの数行のコードを使用して、F# で検索エンジンを作成しました。私のポスターでそれについて読むことができ、完全な実装にアクセスできます
基本的な考え方は以下のコードに示されていますが、実際にはコード自体よりも多くの説明が必要です。それらは私のウェブサイトでも入手できます。
このコードは、ドキュメントのコレクションのインデックスをディスク上に作成します。索引付けは外部メモリで行われます。
1. let create_postings in_name tmp_dir out_name = 2. let process_doc (doc_id, doc_text) = 3. doc_text |> トークン化 |> ストップワード |> 語幹 4a. |> List.count 4b. |> ListExt.map(fun (単語, tf) -> (単語, (doc_id, tf)) 5. in_name 6. |> as_lines 7. |> Seq.map_concat extract_docs 8. |> Seq.map_concat process_doc 9a。|> External.group_by (楽しい (w, _) -> w) 9b. (楽しい (_, docid_and_tf) -> docid_and_tf) 9c。(楽しい lst -> (List.length lst, lst)) 9d。tmp_dir 9e。(外部.ElemDesc()) 10. |> 出力出力名