Spaces:
Running
Running
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() |