mghareeb32 commited on
Commit
aeed6bf
·
1 Parent(s): e080fca

More strict suggestions

Browse files
Files changed (6) hide show
  1. app.py +7 -4
  2. complete.py +3 -3
  3. complete.tmp +40 -55
  4. garood.gold +4 -0
  5. garood.py +6 -4
  6. 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
- g = garood.state_to_str(s, EN)
88
- st.code(f"{garood.en2ar(g)}\n{garood.g2v(g)}\n", language=None)
 
 
 
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"جاري وضع علامات التشكيل على {len(poss)} اقتراحا..."):
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=32) as executor:
30
  futures = [
31
  executor.submit(suggest, input)
32
- for i in range(3)
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=32) as executor:
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
- EVALUATING...
34
- SUGGESTING...
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 = 12
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 = 12
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] > 40: return -1, None
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
- 35 GSRN_GLY_YṬLA_BKB_NTMḪ_RM#_
31
- 44 GSRN_GLY_YṬLA_BKA_BN_TḪ_RM#_
32
- 44 GSRN_GLY_YṬLA_BKA_BN_MḪ_RM#_
33
- 44 GSRN_GLY_YṬLA_BKB_NT_MḪ_RM#_
34
- 44 GSRN_GLY_YṬ_LA_BKB_NTMḪ_RM#_
35
- 44 GS_RN_GLY_YṬLA_BKB_NTMḪ_RM#_
36
- 53 GSRN_GLY_YṬ_LA_BKA_BN_TḪ_RM#_
37
- 53 GSRN_GLY_YṬ_LA_BKA_BN_MḪ_RM#_
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