search_jurist3 / app.py
ramdane's picture
Update app.py
1231411 verified
raw
history blame contribute delete
No virus
3.62 kB
import pickle
import os
import re
fileobj=open("/home/user/app/embmmn7.obj","rb")
corpus_embeddings,corpus=pickle.load(fileobj)
fileobj.close()
from sentence_transformers import SentenceTransformer, util
import torch
embedder = SentenceTransformer("ramdane/jurimodel")
def showrs(queries,number,id=0):
if(id==-1):
query_embedding = embedder.encode(queries, convert_to_tensor=True)
hits = util.semantic_search(query_embedding, corpus_embeddings, top_k=10)
hits = hits[0] #Get the hits for the first query
if(hits[number]['score']>0.4):
return corpus[hits[number]['corpus_id'] ]
else:
return "لم نتمكن من ايجاد النتيجة اما لعدم وجود الاجتهاد او لعدم كتابة جملة بحث مناسبة "
else:
chambres=[["العقارية", "الغرفة العقارية"," العقارية"],["المدنية","الغرفة المدنية ","غرفة المدنية "],["الاجتماعية","الغرفة الاجتماعية","الإجتماعية" ], ["الجنح","الجنح","جنح ومخالفت" ], ["الجنائية","جنائية","الجنائية"],["شؤون الاسرة","شؤون الأسرة","الاحوال الشخصية","المواريث","الأحوال الشخصية"],["التجارية ","التجارية ","التجارية","تجارية","البحرية"],["محكمة التنازع","غرفة ادارية","مجلس الدولة","الغرفة الادارية","مجلس الدولة"]]
phrases_to_search = chambres[id]
corpusf = []
corpus_embeddingsf = []
for i, text in enumerate(corpus):
found = any(phrase in text for phrase in phrases_to_search)
if found:
corpusf.append(text)
corpus_embeddingsf.append(corpus_embeddings[i])
query_embedding = embedder.encode(queries, convert_to_tensor=True)
hits = util.semantic_search(query_embedding, corpus_embeddingsf, top_k=10)
hits = hits[0]
return corpusf[hits[number]['corpus_id'] ]
import gradio as gr
# Define a dictionary to map text labels to numbers
room_options = {
"الكل": -1,
"الغرفة العقارية": 0,
"الغرفة المدنية": 1,
"الغرفة الاجتماعية": 2,
"الغرفة الجنح والمخالفات": 3,
"الغرفة الحنائية": 4,
"الغرفة شؤون الاسرة والمواريث": 5,
"الغرفة التجارية": 6,
}
def has_number(text, target_number):
# Updated pattern to handle the case where the number is in the middle of the text
pattern = r'(?:القرار رقم:|قرار رقم|رقم القرار)\s*(\d+)'
match = re.search(pattern, text)
if match:
extracted_number = match.group(1)
return extracted_number == target_number
return False
def find_first_matching_text( target_number):
for text in corpus:
if has_number(text, target_number):
return text
return "لم نتمكن من ايجاد القرار"
def greet_user(name,numbers,num):
# Extract the selected number based on the selected room
number =num
if(int(num)==-2):
return find_first_matching_text(name)
else:
return showrs(name,int(numbers),int(number))
# Create a list of room options for the dropdown
room_choices = list(room_options.keys())
app = gr.Interface(
fn=greet_user,
inputs=[gr.Textbox(label="ادخل كلمات البحث"),gr.Number(label="الترتيب"),gr.Number(label="اختر الغرفة")],
outputs=gr.TextArea(label="Result")
)
app.launch()