Spaces:
Sleeping
Sleeping
Commit ·
aeed6bf
1
Parent(s): e080fca
More strict suggestions
Browse files- app.py +7 -4
- complete.py +3 -3
- complete.tmp +40 -55
- garood.gold +4 -0
- garood.py +6 -4
- garood.tmp +12 -16
app.py
CHANGED
|
@@ -84,12 +84,15 @@ with tabs[1]:
|
|
| 84 |
st.code(f"{query}\n{AR}\n", language=None)
|
| 85 |
EN, HR = garood.en_gen_enhr(garood.ar_gen_en(AR))
|
| 86 |
c, s = garood.bh_gen_best(BH, EN, HR, True)
|
| 87 |
-
|
| 88 |
-
|
|
|
|
|
|
|
|
|
|
| 89 |
|
| 90 |
with tabs[2]:
|
| 91 |
BH = garood.config()['bahr']['kamil_1']
|
| 92 |
-
query = "
|
| 93 |
cols = st.columns([6, 3, 3])
|
| 94 |
with cols[0]:
|
| 95 |
query = st.text_input(
|
|
@@ -102,7 +105,7 @@ with tabs[2]:
|
|
| 102 |
AR = wisdom_extract.allam("allam/shakl.txt", {"input": query}).strip()
|
| 103 |
with st.spinner('جاري توليد الإقتراحات...'):
|
| 104 |
poss = complete.gen(query)
|
| 105 |
-
with st.spinner(f"جاري
|
| 106 |
pshak = complete.shakk(poss)
|
| 107 |
for i, val in enumerate(complete.filter(pshak)):
|
| 108 |
p, c, s, g = val
|
|
|
|
| 84 |
st.code(f"{query}\n{AR}\n", language=None)
|
| 85 |
EN, HR = garood.en_gen_enhr(garood.ar_gen_en(AR))
|
| 86 |
c, s = garood.bh_gen_best(BH, EN, HR, True)
|
| 87 |
+
if c >= 0:
|
| 88 |
+
g = garood.state_to_str(s, EN)
|
| 89 |
+
st.code(f"{garood.en2ar(g)}\n{garood.g2v(g)}\n", language=None)
|
| 90 |
+
else:
|
| 91 |
+
st.error("الشطر لا يلتزم ببحر الكامل", icon="🚨")
|
| 92 |
|
| 93 |
with tabs[2]:
|
| 94 |
BH = garood.config()['bahr']['kamil_1']
|
| 95 |
+
query = "كم حدث الأصحاب"
|
| 96 |
cols = st.columns([6, 3, 3])
|
| 97 |
with cols[0]:
|
| 98 |
query = st.text_input(
|
|
|
|
| 105 |
AR = wisdom_extract.allam("allam/shakl.txt", {"input": query}).strip()
|
| 106 |
with st.spinner('جاري توليد الإقتراحات...'):
|
| 107 |
poss = complete.gen(query)
|
| 108 |
+
with st.spinner(f"جاري التصفية من {len(poss)} اقتراحا..."):
|
| 109 |
pshak = complete.shakk(poss)
|
| 110 |
for i, val in enumerate(complete.filter(pshak)):
|
| 111 |
p, c, s, g = val
|
complete.py
CHANGED
|
@@ -26,10 +26,10 @@ def shakkil(p):
|
|
| 26 |
def gen(input):
|
| 27 |
print("SUGGESTING...")
|
| 28 |
poss = set()
|
| 29 |
-
with ThreadPoolExecutor(max_workers=
|
| 30 |
futures = [
|
| 31 |
executor.submit(suggest, input)
|
| 32 |
-
for
|
| 33 |
]
|
| 34 |
for future in as_completed(futures):
|
| 35 |
for p in future.result(): poss.add(p)
|
|
@@ -39,7 +39,7 @@ def gen(input):
|
|
| 39 |
def shakk(poss):
|
| 40 |
print("TASHKEELING...")
|
| 41 |
pshak = []
|
| 42 |
-
with ThreadPoolExecutor(max_workers=
|
| 43 |
futures = [
|
| 44 |
executor.submit(shakkil, p)
|
| 45 |
for p in poss
|
|
|
|
| 26 |
def gen(input):
|
| 27 |
print("SUGGESTING...")
|
| 28 |
poss = set()
|
| 29 |
+
with ThreadPoolExecutor(max_workers=8) as executor:
|
| 30 |
futures = [
|
| 31 |
executor.submit(suggest, input)
|
| 32 |
+
for _ in range(5)
|
| 33 |
]
|
| 34 |
for future in as_completed(futures):
|
| 35 |
for p in future.result(): poss.add(p)
|
|
|
|
| 39 |
def shakk(poss):
|
| 40 |
print("TASHKEELING...")
|
| 41 |
pshak = []
|
| 42 |
+
with ThreadPoolExecutor(max_workers=8) as executor:
|
| 43 |
futures = [
|
| 44 |
executor.submit(shakkil, p)
|
| 45 |
for p in poss
|
complete.tmp
CHANGED
|
@@ -1,58 +1,43 @@
|
|
| 1 |
SUGGESTING...
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
TASHKEELING...
|
| 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 |
-
TASHKEELING...
|
| 47 |
-
قَدْ سَامَرَ الْأَصْحَابَ فِي مَجْلِسِ النِّدَا
|
| 48 |
-
قَدْ سَامَرْتُ الْأَصْحَابَ فِي ظِلِّ شَجَرَةٍ
|
| 49 |
-
قَدْ سَامَرَ الْأَصْحَابَ فِي رَوْضَةِ الْحَمَا
|
| 50 |
-
قَدْ سَامَرَ الْأَصْحَابَ فِي خَيْرَةٍ الْفَلَا
|
| 51 |
-
قَدْ سَامَرَ الْأَصْحَابَ فِي دَارِ الْكَرَى
|
| 52 |
-
قَدْ سَامَرَ الْأَصْحَابُ فِي سَاعَةِ السِّحْرِ
|
| 53 |
-
قَدْ سَامَرَ الْأَصْحَابُ فِي وَقْتِ مَغْرِبِ
|
| 54 |
-
قَدْ سَامَرَ الْأَصْحَابُ فِي يَوْمٍ طَيِّبِ
|
| 55 |
-
قَدْ سَامَرَ الْأَصْحَابُ فِي يَوْمِ الصَّفَا
|
| 56 |
-
قَدْ سَامَرَ الْأَصْحَابُ فِي لَيْلِ الصِّفَا
|
| 57 |
-
قَدْ سَامَرَ الْأَصْحَابُ فِي لَيْلٍ بَهِيْمِ
|
| 58 |
EVALUATING...
|
|
|
|
| 1 |
SUGGESTING...
|
| 2 |
+
كم حدث الأصحاب عن كرمه
|
| 3 |
+
كم حدث الأصحاب عن أهل القرى
|
| 4 |
+
كم حدث الأصحاب عن جهاده
|
| 5 |
+
كم حدث الأصحاب عن زمن مضى
|
| 6 |
+
كم حدث الأصحاب عن سخافتي
|
| 7 |
+
كم حدث الأصحاب عن محبتي
|
| 8 |
+
كم حدث الأصحاب عن نبل فعله
|
| 9 |
+
كم حدث الأصحاب عن أخلاقه
|
| 10 |
+
كم حدث الأصحاب عن زمن السلام
|
| 11 |
+
كم حدث الأصحاب عن شهامتي
|
| 12 |
+
كم حدث الأصحاب عن زمن الردى
|
| 13 |
+
كم حدث الأصحاب عن بلاهتي
|
| 14 |
+
كم حدث الأصحاب عن أخباره
|
| 15 |
+
كم حدث الأصحاب عن أقواله
|
| 16 |
+
كم حدث الأصحاب عن ضراوتي
|
| 17 |
+
كم حدث الأصحاب عن أشغاله
|
| 18 |
+
كم حدث الأصحاب عن ورعه
|
| 19 |
+
كم حدث الأصحاب عن يوم الوغى
|
| 20 |
+
كم حدث الأصحاب عن ذكائه
|
| 21 |
+
كم حدث الأصحاب عن أحواله
|
| 22 |
TASHKEELING...
|
| 23 |
+
كَمْ حَدَّثَ الْأَصْحَابُ عَنْ سُخَافَتِي
|
| 24 |
+
كَمْ حَدَّثَ الْأَصْحَابَ عَن مَحَبَّتِي
|
| 25 |
+
كَمْ حَدَثَ الْأَصْحَابَ عَنْ نَبْلِ فِعْلِهِ
|
| 26 |
+
كَمْ حَدّثَ الْأَصْحَابُ عَنْ كَرَمِهِ
|
| 27 |
+
كَمْ حَدَّثَ الْأَصْحَابُ عَنْ أَهْلِ الْقُرَى
|
| 28 |
+
كَمْ حَدَّثَ الْأَصْحَابُ عَنْ زَمَنٍ مَضَى
|
| 29 |
+
كَمْ حَدَّثَ الْأَصْحَابُ عَنْ ج��هَادِهِ
|
| 30 |
+
كَمْ حَدَّثَ الْأَصْحَابُ عَنْ أَخْلَاقِهِ
|
| 31 |
+
كَمْ حَدَثَ الْأَصْحَابُ عَنْ زَمَنِ السَّلَامِ
|
| 32 |
+
كَمْ حَدَّثَ الْأَصْحَابُ عَنْ شَهَامَتِي
|
| 33 |
+
كَمْ حَدَّثَ الْأَصْحَابُ عَنْ أَقْوَالِهِ
|
| 34 |
+
كَمْ حَدَّثَ الْأَصْحَابُ عَنْ زَمَنِ الرَّدَى
|
| 35 |
+
كَمْ حَدَّثَ الْأَصْحَابُ عَنْ أَخْبَارِهِ
|
| 36 |
+
كَمْ حَدَّثَ الْأَصْحَابُ عَنْ ضَرَاوَتِي
|
| 37 |
+
كَمْ حَدَثَ الْأَصْحَابُ عَنْ أَشْغَالِهِ
|
| 38 |
+
كَمْ حَدَّثَ الْأَصْحَابُ عَنْ بَلَاهَتِي
|
| 39 |
+
كَمْ حَدَّثَ الْأَصْحَابُ عَنْ وَرَعِهِ
|
| 40 |
+
كَمْ حَدَثَ الْأَصْحَابُ عَنْ ذَكَائِهِ
|
| 41 |
+
كَمْ حَدَّثَ الْأَصْحَابَ عَنْ يَوْمِ الْوَغَى
|
| 42 |
+
كَمْ حَدَّثَ الْأَصْحَابُ عَنْ أَحْوَالِهِ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 43 |
EVALUATING...
|
garood.gold
CHANGED
|
@@ -34,3 +34,7 @@ None
|
|
| 34 |
ḤT_TA_TKL_LMKL_ĀṢM_MA_L#_ĀG#_
|
| 35 |
حَتَّى تَكَلَّمَ كَالْأَصَمِّ الْأَ
|
| 36 |
None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
ḤT_TA_TKL_LMKL_ĀṢM_MA_L#_ĀG#_
|
| 35 |
حَتَّى تَكَلَّمَ كَالْأَصَمِّ الْأَ
|
| 36 |
None
|
| 37 |
+
قَدْ سَامَرَ الْأَصْحَابَ فِي يَوْمِ الْحَرْبِ
|
| 38 |
+
QD_SA_MRL_ĀṢ_ḤA_BFY_YW_ML_ḤRB_
|
| 39 |
+
حَتَّى تَكَلَّمَ كَالْأَصَمِّ الْأَعْجَمِ الْأَعْجَمِ
|
| 40 |
+
None
|
garood.py
CHANGED
|
@@ -151,7 +151,7 @@ def state_next(EN, HR, BH, s):
|
|
| 151 |
if not HR[s.acts_i:].startswith("_") and not HR[s.acts_i:].startswith("x"): cost_skn = 10
|
| 152 |
yield cost_skn, State(bh_i=s.bh_i+2, acts_i=s.acts_i+1, acts=(s.acts << AX_BITS) | AX_SKN)
|
| 153 |
|
| 154 |
-
cost_hdf =
|
| 155 |
if EN[s.acts_i:].startswith("A") and HR[s.acts_i+1:].startswith("_"): cost_hdf = 1
|
| 156 |
yield cost_hdf, State(bh_i=s.bh_i, acts_i=s.acts_i+1, acts=(s.acts << AX_BITS) | AX_HDF)
|
| 157 |
|
|
@@ -166,7 +166,7 @@ def state_next(EN, HR, BH, s):
|
|
| 166 |
|
| 167 |
|
| 168 |
if BH[s.bh_i:].startswith("??_") and not EN[s.acts_i:].startswith("A"):
|
| 169 |
-
cost_madd =
|
| 170 |
if s.acts_i == len(EN) - 1: cost_madd //= 4
|
| 171 |
yield cost_madd, State(bh_i=s.bh_i+3, acts_i=s.acts_i+1, acts=(s.acts << AX_BITS) | AX_MDD)
|
| 172 |
|
|
@@ -180,7 +180,7 @@ def state_search(EN, HR, BH):
|
|
| 180 |
while len(q) > 0:
|
| 181 |
c1, s1 = heapq.heappop(q)
|
| 182 |
if best_c >= 0 and c1 > best_c: continue
|
| 183 |
-
if s1.bh_i == len(BH):
|
| 184 |
best_c = c1
|
| 185 |
best.append(s1)
|
| 186 |
continue
|
|
@@ -217,7 +217,7 @@ def bh_gen_best(combs, EN, HR, verbose=False):
|
|
| 217 |
cost_list = list(ans.keys())
|
| 218 |
if len(cost_list) < 1: return -1, None
|
| 219 |
ans = ans[cost_list[0]]
|
| 220 |
-
if len(ans) != 1 or cost_list[0] >
|
| 221 |
return cost_list[0], next(iter(ans))
|
| 222 |
|
| 223 |
if __name__ == "__main__":
|
|
@@ -242,6 +242,8 @@ if __name__ == "__main__":
|
|
| 242 |
حَتَّى تَكَلَّمَ كَالْأَصَمِّ الْأَعْجَ
|
| 243 |
حَتَّى تَكَلَّمَ كَالْأَصَمِّ الْأَعْ
|
| 244 |
حَتَّى تَكَلَّمَ كَالْأَصَمِّ الْأَ
|
|
|
|
|
|
|
| 245 |
""".strip().split("\n")):
|
| 246 |
EN, HR = en_gen_enhr(ar_gen_en(AR))
|
| 247 |
c, s = bh_gen_best(BH, EN, HR, i==13)
|
|
|
|
| 151 |
if not HR[s.acts_i:].startswith("_") and not HR[s.acts_i:].startswith("x"): cost_skn = 10
|
| 152 |
yield cost_skn, State(bh_i=s.bh_i+2, acts_i=s.acts_i+1, acts=(s.acts << AX_BITS) | AX_SKN)
|
| 153 |
|
| 154 |
+
cost_hdf = 20
|
| 155 |
if EN[s.acts_i:].startswith("A") and HR[s.acts_i+1:].startswith("_"): cost_hdf = 1
|
| 156 |
yield cost_hdf, State(bh_i=s.bh_i, acts_i=s.acts_i+1, acts=(s.acts << AX_BITS) | AX_HDF)
|
| 157 |
|
|
|
|
| 166 |
|
| 167 |
|
| 168 |
if BH[s.bh_i:].startswith("??_") and not EN[s.acts_i:].startswith("A"):
|
| 169 |
+
cost_madd = 15
|
| 170 |
if s.acts_i == len(EN) - 1: cost_madd //= 4
|
| 171 |
yield cost_madd, State(bh_i=s.bh_i+3, acts_i=s.acts_i+1, acts=(s.acts << AX_BITS) | AX_MDD)
|
| 172 |
|
|
|
|
| 180 |
while len(q) > 0:
|
| 181 |
c1, s1 = heapq.heappop(q)
|
| 182 |
if best_c >= 0 and c1 > best_c: continue
|
| 183 |
+
if s1.bh_i == len(BH) and s1.acts_i == len(EN):
|
| 184 |
best_c = c1
|
| 185 |
best.append(s1)
|
| 186 |
continue
|
|
|
|
| 217 |
cost_list = list(ans.keys())
|
| 218 |
if len(cost_list) < 1: return -1, None
|
| 219 |
ans = ans[cost_list[0]]
|
| 220 |
+
if len(ans) != 1 or cost_list[0] > 45: return -1, None
|
| 221 |
return cost_list[0], next(iter(ans))
|
| 222 |
|
| 223 |
if __name__ == "__main__":
|
|
|
|
| 242 |
حَتَّى تَكَلَّمَ كَالْأَصَمِّ الْأَعْجَ
|
| 243 |
حَتَّى تَكَلَّمَ كَالْأَصَمِّ الْأَعْ
|
| 244 |
حَتَّى تَكَلَّمَ كَالْأَصَمِّ الْأَ
|
| 245 |
+
قَدْ سَامَرَ الْأَصْحَابَ فِي يَوْمِ الْحَرْبِ
|
| 246 |
+
حَتَّى تَكَلَّمَ كَالْأَصَمِّ الْأَعْجَمِ الْأَعْجَمِ
|
| 247 |
""".strip().split("\n")):
|
| 248 |
EN, HR = en_gen_enhr(ar_gen_en(AR))
|
| 249 |
c, s = bh_gen_best(BH, EN, HR, i==13)
|
garood.tmp
CHANGED
|
@@ -27,22 +27,14 @@ BL_ḤZ_NFṢ_ṢM_MA_NFL_MTṮL_LM#_
|
|
| 27 |
عَسِراً عَلَيَّ طِلابُكِ اِبنةَ مَخرَمِ
|
| 28 |
aia_aa_xixxoiixxaaxai
|
| 29 |
GSRNGLYYṬLABKABNTMḪRM
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
53 GSRN_GLY_YṬ_LA_BKB_NT_MḪ_RM#_
|
| 39 |
-
53 GS_RN_GLY_YṬLA_BKA_BN_TḪ_RM#_
|
| 40 |
-
53 GS_RN_GLY_YṬLA_BKA_BN_MḪ_RM#_
|
| 41 |
-
53 GS_RN_GLY_YṬLA_BKB_NT_MḪ_RM#_
|
| 42 |
-
53 GS_RN_GLY_YṬ_LA_BKB_NTMḪ_RM#_
|
| 43 |
-
62 GS_RN_GLY_YṬ_LA_BKA_BN_TḪ_RM#_
|
| 44 |
-
62 GS_RN_GLY_YṬ_LA_BKA_BN_MḪ_RM#_
|
| 45 |
-
62 GS_RN_GLY_YṬ_LA_BKB_NT_MḪ_RM#_
|
| 46 |
GSRN_GLY_YṬLA_BKB_NTMḪ_RM#_
|
| 47 |
حَتَّى تَكَلَّمَ كَالْأَصَمِّ
|
| 48 |
None
|
|
@@ -52,3 +44,7 @@ None
|
|
| 52 |
ḤT_TA_TKL_LMKL_ĀṢM_MA_L#_ĀG#_
|
| 53 |
حَتَّى تَكَلَّمَ كَالْأَصَمِّ الْأَ
|
| 54 |
None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
عَسِراً عَلَيَّ طِلابُكِ اِبنةَ مَخرَمِ
|
| 28 |
aia_aa_xixxoiixxaaxai
|
| 29 |
GSRNGLYYṬLABKABNTMḪRM
|
| 30 |
+
43 GSRN_GLY_YṬLA_BKB_NTMḪ_RM#_
|
| 31 |
+
49 GSRN_GLY_YṬLA_BKA_BN_TM_ḪRM_
|
| 32 |
+
52 GSRN_GLY_YṬ_LA_BKB_NTMḪ_RM#_
|
| 33 |
+
52 GS_RN_GLY_YṬLA_BKB_NTMḪ_RM#_
|
| 34 |
+
58 GSRN_GLY_YṬ_LA_BKA_BN_TM_ḪRM_
|
| 35 |
+
58 GS_RN_GLY_YṬLA_BKA_BN_TM_ḪRM_
|
| 36 |
+
61 GS_RN_GLY_YṬ_LA_BKB_NTMḪ_RM#_
|
| 37 |
+
67 GS_RN_GLY_YṬ_LA_BKA_BN_TM_ḪRM_
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
GSRN_GLY_YṬLA_BKB_NTMḪ_RM#_
|
| 39 |
حَتَّى تَكَلَّمَ كَالْأَصَمِّ
|
| 40 |
None
|
|
|
|
| 44 |
ḤT_TA_TKL_LMKL_ĀṢM_MA_L#_ĀG#_
|
| 45 |
حَتَّى تَكَلَّمَ كَالْأَصَمِّ الْأَ
|
| 46 |
None
|
| 47 |
+
قَدْ سَامَرَ الْأَصْحَابَ فِي يَوْمِ الْحَرْبِ
|
| 48 |
+
QD_SA_MRL_ĀṢ_ḤA_BFY_YW_ML_ḤRB_
|
| 49 |
+
حَتَّى تَكَلَّمَ كَالْأَصَمِّ الْأَعْجَمِ الْأَعْجَمِ
|
| 50 |
+
None
|