Question

Existe-t-il de bons exemples (sites Web ou livres) sur la manière de créer un moteur de recherche en texte intégral en F #?

Était-ce utile?

La solution

Voulez-vous écrire vous-même? Ou avez-vous simplement besoin de cette fonctionnalité?

Si vous avez besoin de cette fonctionnalité, une base de données intégrée / en mémoire avec prise en charge de la recherche en texte intégral peut faire l'affaire. Puisqu'il s'agisse de .Net, je recommanderais le fournisseur SQLite ADO.Net en tant que concurrent open-source. C'est vraiment bien (supportez LINQ avant tout autre fournisseur, support au moment du design, etc.), et le support FTS est en développement très actif. Je pense que Google travaille sur cela. Il existe également une base de données VistaDB . Je l'utilise principalement maintenant. Il devrait avoir un support FTS. Entièrement .Net, ce qui lui confère certains avantages en termes d'intégration.

Si vous devez le faire vous-même, consultez la recherche d'informations . J'en ai lu quelques-unes, mais je ne connais rien qui se démarque de la foule. Amazon pourrait y aider.

Autres conseils

J'ai écrit un moteur de recherche en fa # en utilisant seulement quelques lignes de code. Vous pouvez lire à ce sujet dans mon affiche et accéder à la mise en œuvre complète dans

page d'accueil de Stefan Savev

L'idée de base est illustrée dans le code ci-dessous, mais il faut davantage d'explications que le code lui-même. Celles-ci sont également disponibles sur mon site Web.

Ce code crée l'index sur le disque d'une collection de documents. L'indexation est effectuée dans la mémoire externe.

1.   let create_postings in_name tmp_dir out_name =
2.     let process_doc (doc_id, doc_text) = 
3.         doc_text |> tokenize |> stopword |> stem 
4a.        |> List.count
4b.        |> ListExt.map(fun (word, tf) -> (word, (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 (fun (w, _) -> w) 
9b.       (fun (_, docid_and_tf) -> docid_and_tf) 
9c.       (fun lst -> (List.length lst, lst)) 
9d.       tmp_dir
9e.       (External.ElemDesc())
10.    |> output out_name
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top