Youmnaaaa commited on
Commit
00cf934
·
verified ·
1 Parent(s): 975a954

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -6
app.py CHANGED
@@ -191,7 +191,7 @@ CAT_SINGLE = {
191
 
192
  KEYWORD_INTENTS = {
193
  "greeting": ["السلام عليكم", "سلام عليكم", "وعليكم السلام", "اهلا", "أهلا", "هلا", "هاي", "مرحبا", "صباح الخير", "مساء الخير", "سلام", "hi", "hello", "hey",
194
- "عامل ايه", "عامل إيه", "عاملة ايه", "عاملة إيه", "اخبارك ايه", "أخبارك ايه", "اخبارك إيه", "ازيك", "ازيّك", "ازيك ايه", "ايه الاخبار", "ايه أخبارك", "عامل ايه انهارده"],
195
  "thanks": ["شكرا", "شكراً", "تسلم", "تسلمي", "يسلمو", "مشكور", "thanks", "thank you"],
196
  "goodbye": ["مع السلامة", "مع السلامه", "باي", "وداعا", "bye", "goodbye"],
197
  "confirm": ["تمام", "اوك", "أوك", "ماشي", "حاضر", "اه", "اها", "ايوه", "نعم"],
@@ -984,7 +984,7 @@ def clean_item_query(text: str) -> str:
984
  "دلوقتي", "حاليا", "الان", "هلا", "النهارده", "مني", "لي",
985
  "اروح", "هروح", "اشوف", "هشوف", "اتاكل", "أتاكل", "اقدر", "الاقي", "الاقيه",
986
  "ادور", "هدور", "اديني", "اديلي", "جيبلي", "ازاي", "انا", "أنا",
987
- "اقترحلي", "اقترح", "رشحلي", "رشح", "منه", "منها", "بسرعه", "بسرعة", "بسرع",
988
  "جعان", "جعانة", "جوعان", "جوعانة", "تعبان", "تعبانة", "عيان", "عيانة",
989
  "افطر", "أفطر", "اتغدى", "أتغدى", "اتعشى", "أتعشى", "هفطر", "هتغدى", "هتعشى", "عشاء", "عشا", "غداء", "غدا", "فطار", "فطور",
990
  ]
@@ -1050,7 +1050,7 @@ def extract_item_query(text: str) -> str:
1050
  # fall through to category/location handling instead of becoming a bogus
1051
  # item_query.
1052
  STRONG_ITEM_PATTERN_WORDS = [
1053
- "عنده", "عندها", "عندو", "عندهم", "عندكو", "عندك", "بيقدم", "بتقدم", "بيعمل", "بتعمل",
1054
  "اشتري", "اشترى", "اشتر", "اجيب", "محتاج", "محتاجه", "محتاجة",
1055
  "has", "have", "with", "serve", "serves", "selling",
1056
  ]
@@ -1186,6 +1186,8 @@ def extract_location_suffix(text: str) -> tuple:
1186
  for cand in (cw, cw_no_wow):
1187
  if not cand:
1188
  continue
 
 
1189
  if infer_category(cand) or has_any(cand, OPEN_WORDS + NEAR_WORDS) or _has_item_pattern(cand):
1190
  return True
1191
  return False
@@ -1246,7 +1248,7 @@ def _strip_category_words(q: str) -> str:
1246
  "ادور", "هدور", "اديني", "اديلي", "هات", "جيبلي", "فين",
1247
  # generic "something to eat" filler — "حتة اكل"/"حته اكل" means "a
1248
  # bite to eat" in general, not a specific dish; never a real item.
1249
- "حته", "حتة", "اكل", "أكل", "انا", "أنا", "لو سمحت", "لو سمحتي", "ممكن", "من فضلك", "من فضلكم", "اقترحلي", "اقترح", "رشحلي", "رشح", "منه", "منها", "بسرعه", "بسرعة", "بسرع",
1250
  ]
1251
  for w in generic_words:
1252
  cw = clean_text(w)
@@ -1591,7 +1593,7 @@ def extract_place_name_from_text(text: str) -> str:
1591
  "عايزه", "عاوزه", "عاوز", "محتاج", "محتاجة", "محتاجه", "اشتري", "اشترى", "اشتر", "اجيب", "نفسي",
1592
  "اروح", "هروح", "ازاي", "اشوف", "هشوف", "اتاكل", "أتاكل", "اقدر", "الاقي", "الاقيه",
1593
  "ادور", "هدور", "اديني", "اديلي", "جيبلي", "هل", "الوقت", "ده", "دي", "انا", "أنا",
1594
- "لو سمحت", "لو سمحتي", "ممكن", "من فضلك", "من فضلكم", "اقترحلي", "اقترح", "رشحلي", "رشح", "منه", "منها", "بسرعه", "بسرعة", "بسرع",
1595
  "جعان", "جعانة", "جوعان", "جوعانة", "تعبان", "تعبانة", "عيان", "عيانة",
1596
  "افطر", "أفطر", "اتغدى", "أتغدى", "اتعشى", "أتعشى", "هفطر", "هتغدى", "هتعشى", "عشاء", "عشا", "غداء", "غدا", "فطار", "فطور",
1597
  "قريب", "اقرب", "مفتوح", "فاتح", "دلوقتي", "في", "من", "عند",
@@ -1977,7 +1979,23 @@ def apply_filters(df: pd.DataFrame, category: str = "", location: str = "", pric
1977
  def _loc_match(r):
1978
  field = clean_text(str(r.get("location", "")) + " " + str(r.get("address", "")))
1979
  field_words = set(field.split()) | {_strip_al(w) for w in field.split()}
1980
- return any(p in field or p in field_words or any(p in fw or fw in p for fw in field_words if len(fw) > 1) for p in parts)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1981
 
1982
  mask = f.apply(_loc_match, axis=1)
1983
  loc_filtered = f[mask]
 
191
 
192
  KEYWORD_INTENTS = {
193
  "greeting": ["السلام عليكم", "سلام عليكم", "وعليكم السلام", "اهلا", "أهلا", "هلا", "هاي", "مرحبا", "صباح الخير", "مساء الخير", "سلام", "hi", "hello", "hey",
194
+ "عامل ايه", "عامل إيه", "عاملة ايه", "عاملة إيه", "اخبارك ايه", "أخبارك ايه", "اخبارك إيه", "ازيك", "ازيّك", "ازيك ايه", "ايه الاخبار", "ايه أخبارك", "عامل ايه انهارده", "مساء الفل", "مساء النور"],
195
  "thanks": ["شكرا", "شكراً", "تسلم", "تسلمي", "يسلمو", "مشكور", "thanks", "thank you"],
196
  "goodbye": ["مع السلامة", "مع السلامه", "باي", "وداعا", "bye", "goodbye"],
197
  "confirm": ["تمام", "اوك", "أوك", "ماشي", "حاضر", "اه", "اها", "ايوه", "نعم"],
 
984
  "دلوقتي", "حاليا", "الان", "هلا", "النهارده", "مني", "لي",
985
  "اروح", "هروح", "اشوف", "هشوف", "اتاكل", "أتاكل", "اقدر", "الاقي", "الاقيه",
986
  "ادور", "هدور", "اديني", "اديلي", "جيبلي", "ازاي", "انا", "أنا",
987
+ "اقترحلي", "اقترح", "رشحلي", "رشح", "منه", "منها", "بسرعه", "بسرعة", "بسرع", "ينفع", "تدلني", "دلني", "يوجد", "حاسس", "حاسه", "حاسة", "اني", "إني", "انهي", "أنهي", "ليا", "قوليلي", "عندكم", "والله",
988
  "جعان", "جعانة", "جوعان", "جوعانة", "تعبان", "تعبانة", "عيان", "عيانة",
989
  "افطر", "أفطر", "اتغدى", "أتغدى", "اتعشى", "أتعشى", "هفطر", "هتغدى", "هتعشى", "عشاء", "عشا", "غداء", "غدا", "فطار", "فطور",
990
  ]
 
1050
  # fall through to category/location handling instead of becoming a bogus
1051
  # item_query.
1052
  STRONG_ITEM_PATTERN_WORDS = [
1053
+ "عنده", "عندها", "عندو", "عندهم", "عندكو", "عندك", "عندكم", "بيقدم", "بتقدم", "بيعمل", "بتعمل",
1054
  "اشتري", "اشترى", "اشتر", "اجيب", "محتاج", "محتاجه", "محتاجة",
1055
  "has", "have", "with", "serve", "serves", "selling",
1056
  ]
 
1186
  for cand in (cw, cw_no_wow):
1187
  if not cand:
1188
  continue
1189
+ if cand in {"حاجه", "حاجة", "شويه", "شوية"}:
1190
+ return True
1191
  if infer_category(cand) or has_any(cand, OPEN_WORDS + NEAR_WORDS) or _has_item_pattern(cand):
1192
  return True
1193
  return False
 
1248
  "ادور", "هدور", "اديني", "اديلي", "هات", "جيبلي", "فين",
1249
  # generic "something to eat" filler — "حتة اكل"/"حته اكل" means "a
1250
  # bite to eat" in general, not a specific dish; never a real item.
1251
+ "حته", "حتة", "اكل", "أكل", "انا", "أنا", "لو سمحت", "لو سمحتي", "ممكن", "من فضلك", "من فضلكم", "اقترحلي", "اقترح", "رشحلي", "رشح", "منه", "منها", "بسرعه", "بسرعة", "بسرع", "ينفع", "تدلني", "دلني", "يوجد", "حاسس", "حاسه", "حاسة", "اني", "إني", "انهي", "أنهي", "ليا", "قوليلي", "عندكم", "والله",
1252
  ]
1253
  for w in generic_words:
1254
  cw = clean_text(w)
 
1593
  "عايزه", "عاوزه", "عاوز", "محتاج", "محتاجة", "محتاجه", "اشتري", "اشترى", "اشتر", "اجيب", "نفسي",
1594
  "اروح", "هروح", "ازاي", "اشوف", "هشوف", "اتاكل", "أتاكل", "اقدر", "الاقي", "الاقيه",
1595
  "ادور", "هدور", "اديني", "اديلي", "جيبلي", "هل", "الوقت", "ده", "دي", "انا", "أنا",
1596
+ "لو سمحت", "لو سمحتي", "ممكن", "من فضلك", "من فضلكم", "اقترحلي", "اقترح", "رشحلي", "رشح", "منه", "منها", "بسرعه", "بسرعة", "بسرع", "ينفع", "تدلني", "دلني", "يوجد", "حاسس", "حاسه", "حاسة", "اني", "إني", "انهي", "أنهي", "ليا", "قوليلي", "عندكم", "والله",
1597
  "جعان", "جعانة", "جوعان", "جوعانة", "تعبان", "تعبانة", "عيان", "عيانة",
1598
  "افطر", "أفطر", "اتغدى", "أتغدى", "اتعشى", "أتعشى", "هفطر", "هتغدى", "هتعشى", "عشاء", "عشا", "غداء", "غدا", "فطار", "فطور",
1599
  "قريب", "اقرب", "مفتوح", "فاتح", "دلوقتي", "في", "من", "عند",
 
1979
  def _loc_match(r):
1980
  field = clean_text(str(r.get("location", "")) + " " + str(r.get("address", "")))
1981
  field_words = set(field.split()) | {_strip_al(w) for w in field.split()}
1982
+ for p in parts:
1983
+ if len(p) < 2:
1984
+ continue
1985
+ # Exact whole-word match is always safe, regardless of length.
1986
+ if p in field_words:
1987
+ return True
1988
+ # Raw substring containment is ONLY safe for longer
1989
+ # strings. A short fragment like "حي" (from "الحي
1990
+ # الثالث") is a literal substring of totally unrelated
1991
+ # words like "سياحي" (tourist) — that false positive is
1992
+ # exactly what caused an unrelated restaurant in كورنيش
1993
+ # to wrongly appear for a "الحي الثالث" query.
1994
+ if len(p) >= 5:
1995
+ for fw in field_words:
1996
+ if len(fw) >= 5 and (p in fw or fw in p):
1997
+ return True
1998
+ return False
1999
 
2000
  mask = f.apply(_loc_match, axis=1)
2001
  loc_filtered = f[mask]