aelsaeed commited on
Commit
07b5a3c
·
verified ·
1 Parent(s): 1dc0eeb

Upload 3 files

Browse files
Files changed (3) hide show
  1. README.md +15 -0
  2. app.py +60 -0
  3. requirements.txt +5 -0
README.md ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # AI Library Explorer
2
+
3
+ واجهة بحث حر للكتب والرسائل باستخدام MiniLM.
4
+ يمكن للمستخدم كتابة أي سؤال باللغة العربية أو الإنجليزية، ويظهر له أفضل النتائج من الكتب والرسائل.
5
+
6
+ ## طريقة التشغيل
7
+ - Space سيقوم تلقائيًا بتشغيل app.py عند التشغيل.
8
+ - البيانات والموديل يجب أن تكون موجودة داخل Space.
9
+
10
+ ## الملفات المطلوبة داخل Space
11
+ - books.pkl
12
+ - theses.pkl
13
+ - books_embeddings.pkl
14
+ - theses_embeddings.pkl
15
+ - فولدر الموديل: AI_Library_Model
app.py ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import pandas as pd
3
+ import numpy as np
4
+ import pickle
5
+ from sentence_transformers import SentenceTransformer, util
6
+ import os
7
+
8
+ # =========================
9
+ # قراءة البيانات وEmbeddings من ملفات موجودة داخل Space
10
+ # =========================
11
+ with open("books.pkl", "rb") as f:
12
+ books = pickle.load(f)
13
+
14
+ with open("theses.pkl", "rb") as f:
15
+ theses = pickle.load(f)
16
+
17
+ books["type"] = "Book"
18
+ theses["type"] = "Thesis"
19
+ library = pd.concat([books, theses], ignore_index=True)
20
+
21
+ with open("books_embeddings.pkl", "rb") as f:
22
+ books_emb = pickle.load(f)
23
+
24
+ with open("theses_embeddings.pkl", "rb") as f:
25
+ theses_emb = pickle.load(f)
26
+
27
+ library_embeddings = np.vstack([books_emb, theses_emb])
28
+
29
+ # =========================
30
+ # تحميل موديل MiniLM من فولدر موجود داخل Space
31
+ # =========================
32
+ model = SentenceTransformer("AI_Library_Model")
33
+
34
+ # =========================
35
+ # دالة البحث
36
+ # =========================
37
+ def search_library(query, source_type):
38
+ filtered = library[library["type"] == source_type]
39
+ filtered_emb = library_embeddings[filtered.index]
40
+
41
+ query_emb = model.encode(query)
42
+ scores = util.cos_sim(query_emb, filtered_emb)[0]
43
+ top_idx = np.argsort(scores.cpu().numpy())[::-1][:5]
44
+
45
+ results = filtered.iloc[top_idx][["title","author","year","field"]]
46
+ return results
47
+
48
+ # =========================
49
+ # واجهة Gradio تاب واحدة
50
+ # =========================
51
+ with gr.Blocks() as demo:
52
+ gr.Markdown("## مكتبة AI Explorer - البحث الحر المحلي")
53
+ with gr.Row():
54
+ query = gr.Textbox(label="اكتب سؤال البحث")
55
+ source = gr.Dropdown(choices=["Book", "Thesis"], label="نوع المصدر")
56
+ btn = gr.Button("بحث")
57
+ output = gr.Dataframe(headers=["العنوان","المؤلف","السنة","المجال"])
58
+ btn.click(search_library, inputs=[query, source], outputs=output)
59
+
60
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ gradio==3.50.1
2
+ pandas==2.1.1
3
+ numpy==1.26.0
4
+ sentence-transformers==2.2.2
5
+ torch>=2.0.1