سؤال

هل هناك أي أمثلة جيدة (مواقع ويب أو كتب) حول كيفية إنشاء محرك بحث عن النص الكامل في F#؟

هل كانت مفيدة؟

المحلول

هل تريد أن تكتب هذا بنفسك؟أو هل تحتاج ببساطة إلى الوظيفة؟

إذا كنت بحاجة إلى هذه الوظيفة، فقد تقوم قاعدة البيانات المضمنة/الموجودة في الذاكرة والتي تدعم البحث عن النص الكامل بالمهمة.نظرًا لأنه .Net، فإنني أوصي به مزود SQLite ADO.Net كمنافس مفتوح المصدر.إنه أمر جيد حقًا (دعم LINQ قبل أي مزود آخر، ودعم وقت التصميم، وما إلى ذلك)، ودعم FTS قيد التطوير النشط للغاية.أعتقد أن جوجل تعمل على ذلك.يوجد ايضا قاعدة بيانات فيستا دي بي.أنا أستخدم ذلك بشكل رئيسي الآن.وينبغي أن يكون دعم FTS.بالكامل .Net، مما يمنحه بعض مزايا التكامل.

إذا كان عليك أن تفعل ذلك بنفسك، قم بتسجيل الخروج من الكتب الموجودة على استرجاع المعلومات.لقد قرأت القليل منها، لكني لا أعرف شيئًا يبرز من بين الحشود.قد تساعد أمازون هناك.

نصائح أخرى

لقد كتبت محرك بحث في F# باستخدام بضعة أسطر من التعليمات البرمجية.يمكنك قراءة ذلك في الملصق الخاص بي والوصول إلى التنفيذ الكامل في

الصفحة الرئيسية لستيفان سافيف

تظهر الفكرة الأساسية في الكود أدناه، ولكن هناك حاجة في الواقع إلى مزيد من التوضيحات أكثر من الكود نفسه.تلك متاحة على موقع الويب الخاص بي أيضا.

يقوم هذا الرمز بإنشاء فهرس على القرص لمجموعة من المستندات.تتم الفهرسة في الذاكرة الخارجية.

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top