File size: 3,622 Bytes
48f3d29
 
 
840b0a0
16518a7
86a6c63
bb1c473
5a09214
f9c1764
48f3d29
16518a7
48f3d29
 
 
 
f60f39c
46bb7bb
202ad21
 
48f3d29
 
 
1231411
202ad21
48f3d29
202ad21
 
eb03078
202ad21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48f3d29
 
 
202ad21
 
 
 
 
 
 
 
 
 
 
840b0a0
 
8d8a077
840b0a0
 
 
 
ce3ec05
840b0a0
 
 
 
 
 
 
 
 
 
 
202ad21
946fc5b
202ad21
946fc5b
f92ab84
3bc9455
840b0a0
3bc9455
202ad21
 
 
 
 
 
946fc5b
202ad21
 
07701b4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94

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()