fix: preserve topic terms after act titles
This commit is contained in:
1 parent
feb0ddde32
commit
9c3cbee141
2 files changed
+24
-15
No files matched your search
+20
-14
@@ -31,6 +31,21 @@ BOILERPLATE_PREFIXES = {
|
||||
),
|
||||
"ky": (),
|
||||
}
|
||||
ACT_TITLE_PREFIXES = {
|
||||
"ru": (
|
||||
r"(?:гражданский\s+)?процессуальный\s+кодекс(?:\s+(?:кыргызской\s+республики|кр))?",
|
||||
r"(?:гражданск\w*|уголовн\w*|налогов\w*|трудов\w*|семейн\w*)\s+кодекс\w*(?:\s+(?:кыргызской\s+республики|кр))?",
|
||||
r"кодекс\s+о\s+правонарушениях(?:\s+(?:кыргызской\s+республики|кр))?",
|
||||
r"конституци\w*(?:\s+(?:кыргызской\s+республики|кр))?",
|
||||
r"(?:гк|ук|нк|коап|гпк|упк|уик)(?:\s+(?:кыргызской\s+республики|кр))?",
|
||||
r"закон(?:\s+(?:кыргызской\s+республики|кр))?\s+о\s+(?:защит\w*\s+прав\w*\s+потребител\w*|государственн\w+\s+регистраци\w+\s+юридическ\w+\s+лиц|труд\w*)",
|
||||
),
|
||||
"ky": (
|
||||
r"кыргыз\w*\s+республикасынын\s+конституци\w*",
|
||||
r"(?:кыргыз\w*\s+республикасынын\s+)?(?:жарандык|кылмыш\w*|салык|эмгек|үй-бүлө|административдик|жарандык\s+процесстик)\s+кодекс\w*",
|
||||
r"(?:кыргыз\w*\s+республикасынын\s+)?(?:жк|үк)(?:\s+кр)?",
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
def relaxed_query_text(language: str, query: str) -> str:
|
||||
@@ -39,20 +54,11 @@ def relaxed_query_text(language: str, query: str) -> str:
|
||||
if value.casefold().startswith(prefix):
|
||||
value = value[len(prefix):].strip()
|
||||
break
|
||||
act_patterns = {
|
||||
"ru": (
|
||||
r"\b(?:кодекс\w*|конституци\w*|закон\w*|гк|ук|нк|коап|гпк|упк|уик)\b",
|
||||
r"\bо\s+защит\w*\s+прав\w*\s+потребител\w*\b|\b(?:гражданск\w*|уголовн\w*|налогов\w*|труд\w*|семейн\w*|административн\w*|процессуальн\w*|правонарушени\w*|кыргызск\w*|республик\w*|кр|о|об|и)\b",
|
||||
),
|
||||
"ky": (
|
||||
r"\b(?:кодекс\w*|конституци\w*|мыйзам\w*|жк|үк)\b",
|
||||
r"\b(?:жарандык\w*|кылмыш\w*|салык\w*|эмгек\w*|үй-бүлө\w*|административдик\w*|процесстик\w*|бузуу\w*|кыргыз\w*|республика\w*|кр)\b",
|
||||
),
|
||||
}
|
||||
marker, title_terms = act_patterns[language]
|
||||
if re.search(marker, value.casefold()):
|
||||
value = re.sub(rf"{marker}|{title_terms}", " ", value, flags=re.IGNORECASE)
|
||||
value = re.sub(r"[^\w\-]+", " ", value).strip()
|
||||
for pattern in ACT_TITLE_PREFIXES[language]:
|
||||
match = re.match(rf"\s*{pattern}(?=\s|$|[.,;:!?])", value, re.IGNORECASE)
|
||||
if match:
|
||||
value = value[match.end():].lstrip(" \t,;:—-")
|
||||
break
|
||||
return value
|
||||
|
||||
|
||||
|
||||
@@ -84,13 +84,15 @@ class SearchRelevanceTest(unittest.TestCase):
|
||||
stopword_fallback = next(item["multi_match"] for item in stopword_clauses if item.get("multi_match", {}).get("boost") == 0.1)
|
||||
self.assertEqual(stopword_fallback["minimum_should_match"], 2)
|
||||
|
||||
for language, query in (("ru", "изменения ГК КР"), ("ky", "Кыргыз Республикасынын Конституциясы")):
|
||||
for language, query in (("ru", "последние изменения ГК КР"), ("ky", "Кыргыз Республикасынын Конституциясы")):
|
||||
act_body = json.loads(build_search_body(language, query, 10))
|
||||
act_clauses = act_body["query"]["bool"]["must"]["bool"]["should"]
|
||||
self.assertFalse(any(item.get("multi_match", {}).get("boost") == 0.1 for item in act_clauses))
|
||||
|
||||
for language, query, expected in (
|
||||
("ru", "Налоговый кодекс ответственность за неуплату налога", "ответственность за неуплату налога"),
|
||||
("ru", "Налоговый кодекс налоговая ставка", "налоговая ставка"),
|
||||
("ru", "Налоговый кодекс: налоговая ставка", "налоговая ставка"),
|
||||
("ru", "закон о труде порядок выплаты зарплаты", "порядок выплаты зарплаты"),
|
||||
("ky", "Кыргыз Республикасынын Конституциясы укуктарды чектөө тартиби", "укуктарды чектөө тартиби"),
|
||||
):
|
||||
@@ -102,6 +104,7 @@ class SearchRelevanceTest(unittest.TestCase):
|
||||
for query in (
|
||||
"Закон о защите прав потребителей",
|
||||
"Закон Кыргызской Республики о защите прав потребителей",
|
||||
"Закон Кыргызской Республики о государственной регистрации юридических лиц",
|
||||
):
|
||||
body = json.loads(build_search_body("ru", query, 10))
|
||||
clauses = body["query"]["bool"]["must"]["bool"]["should"]
|
||||
|
||||
Reference in new issue
Block a user