Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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]
|