Pregunta

¿Hay algunos buenos ejemplos (sitios web o libros) sobre cómo construir un motor de búsqueda de texto completo en F #?

¿Fue útil?

Solución

¿Quieres escribir esto tú mismo? ¿O simplemente necesitas la funcionalidad?

Si necesita la funcionalidad, una base de datos integrada / en memoria con soporte de búsqueda de texto completo puede hacer el truco. Como es .Net, recomendaría SQLite ADO.Net Provider como el contendiente de código abierto. Es realmente bueno (soporte LINQ antes que cualquier otro proveedor, soporte en tiempo de diseño, etc.), y el soporte FTS está en desarrollo muy activo. Creo que Google está trabajando en eso. También hay Base de datos de VistaDB . Estoy usando eso principalmente ahora. Debe tener soporte FTS. Enteramente .Net, lo que le da algunas ventajas de integración.

Si tiene que hacerlo usted mismo, consulte los libros de Recuperación de información . He leído algunos, pero no sé nada que se destaque entre la multitud. Amazon podría ayudar allí.

Otros consejos

He escrito un motor de búsqueda en F # usando solo unas pocas líneas de codigo Puedes leer sobre eso en mi cartel. y acceder a la implementación completa en

página de inicio de Stefan Savev

La idea básica se muestra en el código a continuación, pero en realidad se necesitan más explicaciones que el código en sí. También están disponibles en mi sitio web.

Este código crea el índice en el disco de una colección de documentos. La indexación se realiza en la memoria externa.

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top