Commit 5a0ce740 by ccran

feat: add memory export filter;

parent 2708fc78
......@@ -39,6 +39,7 @@ FULL_TEXT_SEGMENT_ID = -1
## 规则集ID列表,需与rules.xlsx中的sheet名称保持一致!!!
ALL_RULESET_IDS = [
"通用",
"通用 (新)",
"借款",
"担保",
"财务口",
......
......@@ -13,6 +13,7 @@ from utils.http_util import upload_file
from utils.doc_util import DocBase
from core.config import META_KEY, FILE_SUFFIX, use_lufa
from core.finding_preprocessor import FindingPreprocessor
from core.tools.memory_export_filter import MemoryExportFilter
logger = logging.getLogger(__name__)
......@@ -84,6 +85,7 @@ class MemoryStore:
self.merge_facts: List[Dict[str, Any]] = []
self.findings: Dict[str, List[Finding]] = {}
self._finding_preprocessor = FindingPreprocessor()
self._export_filter = MemoryExportFilter()
self._load()
# ---------------------- facts ----------------------
......@@ -333,7 +335,10 @@ class MemoryStore:
("suggestion", "建议"),
]
grouped_items = list(self.findings.items())
grouped_items = [
(key, self._export_filter.filter_findings(values))
for key, values in self.findings.items()
]
if grouped_items:
first_key, first_values = grouped_items[0]
ws_first = wb.active
......@@ -456,7 +461,9 @@ class MemoryStore:
target_key = self._normalize_finding_key(finding_key)
with self._lock:
target_findings = list(self._get_findings_bucket(target_key))
target_findings = self._export_filter.filter_findings(
self._get_findings_bucket(target_key)
)
comments: List[Dict[str, Any]] = []
for idx, f in enumerate(target_findings, start=1):
segment_id = int(f.segment_id or 0)
......
from __future__ import annotations
from collections.abc import Iterable, Mapping
from typing import Any, List, Optional, TypeVar
FindingType = TypeVar("FindingType")
class MemoryExportFilter:
"""Filter findings from an export without changing the memory store."""
DEFAULT_EXCLUDED_TITLES = frozenset({"通用审查"})
def __init__(self, excluded_titles: Optional[Iterable[str]] = None) -> None:
titles = (
self.DEFAULT_EXCLUDED_TITLES
if excluded_titles is None
else excluded_titles
)
self._excluded_titles = {
str(title).strip() for title in titles if str(title).strip()
}
def filter_findings(self, findings: Iterable[FindingType]) -> List[FindingType]:
return [finding for finding in findings if self.should_export(finding)]
def should_export(self, finding: Any) -> bool:
rule_title = self._get_rule_title(finding).strip()
return rule_title not in self._excluded_titles
@staticmethod
def _get_rule_title(finding: Any) -> str:
if isinstance(finding, Mapping):
rule_title = finding.get("rule_title") or ""
else:
rule_title = getattr(finding, "rule_title", "")
return str(rule_title)
No preview for this file type
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment