Files changed (1) hide show
  1. app.py +105 -0
app.py ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pickle
3
+ from sentence_transformers import CrossEncoder,SentenceTransformer
4
+ with open('eiga_docs.pkl', 'rb') as file:
5
+ documents=pickle.load( file)
6
+ #with open('index.pkl', 'rb') as file:
7
+ # index=pickle.load( file)
8
+ #documents =[ i["title"]+" "+i["text"] for i in documentt]
9
+ #bi_encoder = SentenceTransformer('all-mpnet-base-v2',device="cpu",)
10
+
11
+ # Load a cross-encoder model for re-ranking
12
+ cross_encoder = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2')
13
+
14
+ # Streamlit app
15
+ #st.title("Information Retrieval System")
16
+
17
+ #query = st.text_input("Enter your query:")
18
+
19
+
20
+ #if query:
21
+ # Encode the query using the bi-encoder
22
+ #query_embedding = bi_encoder.encode([query])
23
+
24
+ # Retrieve top-k documents using FAISS
25
+ #k = 30 # Number of documents to retrieve
26
+ #D, I = index.search(query_embedding, k)
27
+
28
+ #Collect the retrieved documents
29
+ #retrieved_docs = [documents[i] for i in I[0]]
30
+
31
+ #Re-rank the retrieved documents using the cross-encoder
32
+ #cross_inp = [[query, doc["title"]+" "+doc["text"]] for doc in documents]
33
+ #scores = cross_encoder.predict(cross_inp)
34
+
35
+ # Sort the documents by score
36
+ #sorted_docs = [documents[doc] for _, doc in sorted(zip(scores, range(len(documents))), reverse=True)][:10]
37
+
38
+ # Display the results
39
+ #st.write("Top documents:")
40
+ #for i, doc in enumerate(sorted_docs):
41
+ # st.write(f"Result {i+1}. Title: {doc['title']}")
42
+ # st.write(f"Text : {doc['text']}")
43
+ # st.write(f"Lien de telechargment : {doc['doc_url']}")
44
+ # st.markdown("""---""")
45
+
46
+
47
+
48
+ # Function to display results for a given page
49
+ def display_results(sorted_docs, page_number, results_per_page):
50
+ start_index = (page_number - 1) * results_per_page
51
+ end_index = min(page_number * results_per_page, len(sorted_docs))
52
+ for i, doc in enumerate(sorted_docs[start_index:end_index], start=start_index):
53
+ st.write(f"**Result {i+1}.** Title: {doc['title']}")
54
+ st.write(f"Text : {doc['text']}")
55
+ st.write(f"Link : {doc['doc_url']}")
56
+ st.markdown("""---""")
57
+
58
+
59
+
60
+ # Function to perform search and return sorted documents
61
+ def perform_search(query):
62
+ if query:
63
+ cross_inp = [[query, doc["title"] + " " + doc["text"]] for doc in documents]
64
+ scores = cross_encoder.predict(cross_inp)
65
+
66
+ # Sort the documents by score
67
+ sorted_docs = [documents[doc] for _, doc in sorted(zip(scores, range(len(documents))), reverse=True)]
68
+ return sorted_docs
69
+ else:
70
+ return []
71
+
72
+ # Main Streamlit app
73
+ def main():
74
+ st.sidebar.title("Pagination")
75
+ results_per_page = st.sidebar.number_input("Results per page", min_value=1, max_value=10, value=5)
76
+ total_pages = (len(documents) + results_per_page - 1) // results_per_page
77
+ page_number = st.sidebar.number_input("Page Number", min_value=1, max_value=total_pages, value=1)
78
+ st.sidebar.write(f"Current Page Number: {page_number}")
79
+ st.sidebar.write( f"Totale Pages :{total_pages}")
80
+ #print(results_per_page,total_pages,page_number)
81
+
82
+ st.title("Information Retrieval System")
83
+ query = st.text_input("Enter your question:")
84
+
85
+
86
+
87
+ if st.button("Search") or query:
88
+ sorted_docs = perform_search(query)
89
+ st.session_state.sorted_docs = sorted_docs
90
+
91
+ else:
92
+ sorted_docs = st.session_state.get("sorted_docs", [])
93
+
94
+
95
+
96
+ if sorted_docs:
97
+ display_results(st.session_state.sorted_docs, page_number, results_per_page)
98
+ st.write(f"Current Page Number: {page_number}")
99
+
100
+
101
+
102
+
103
+ # Run the app
104
+ if __name__ == "__main__":
105
+ main()