2008-09-25 7 views

Répondre

1

Voulez-vous écrire ceci vous-même? Ou avez-vous simplement besoin de la 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. Comme c'est .Net, je recommanderais SQLite ADO.Net Provider en tant que candidat open-source. C'est vraiment bien (Support LINQ avant tout autre fournisseur, support au design, etc.), et le support FTS est en développement très actif. Je pense que Google travaille là-dessus. Il y a aussi VistaDB Database. J'utilise ça principalement maintenant. Il devrait avoir un support FTS. Entièrement .Net, ce qui lui donne des avantages d'intégration.

Si vous devez le faire vous-même, consultez les livres au Information Retrieval. J'en ai lu quelques-uns, mais je ne sais rien qui se démarque de la foule. Amazon pourrait aider là-bas.

+0

Je veux que je m'écrive pour avoir une expérience d'apprentissage. –

1

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

Stefan Savev's home page

L'idée de base est indiqué dans le code ci-dessous, mais plus d'explications réellement nécessaires que le code lui-même. Ceux-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 
Questions connexes