Auto-strip Nevo preambles and separate style analysis per appeal subtype
- Add strip_nevo_preamble() to extractor.py — auto-removes Nevo database headers (bibliography, legislation, mini-ratio) during training upload - Add appeal_subtype column to style_patterns table — patterns are now stored per subtype instead of globally mixed - Update clear_style_patterns() to support subtype-scoped deletion - Pass appeal_subtype through analyze_corpus → store → upsert pipeline Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -116,6 +116,7 @@ CREATE TABLE IF NOT EXISTS style_patterns (
|
||||
frequency INTEGER DEFAULT 1,
|
||||
context TEXT DEFAULT '',
|
||||
examples JSONB DEFAULT '[]',
|
||||
appeal_subtype TEXT DEFAULT '',
|
||||
created_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
@@ -165,6 +166,9 @@ ALTER TABLE cases ADD COLUMN IF NOT EXISTS appeal_subtype TEXT DEFAULT '';
|
||||
ALTER TABLE style_corpus ADD COLUMN IF NOT EXISTS practice_area TEXT DEFAULT 'appeals_committee';
|
||||
ALTER TABLE style_corpus ADD COLUMN IF NOT EXISTS appeal_subtype TEXT DEFAULT '';
|
||||
|
||||
-- הרחבת style_patterns עם appeal_subtype לניתוח סגנון נפרד לכל סוג ערר
|
||||
ALTER TABLE style_patterns ADD COLUMN IF NOT EXISTS appeal_subtype TEXT DEFAULT '';
|
||||
|
||||
-- טבלת qa_results
|
||||
CREATE TABLE IF NOT EXISTS qa_results (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
@@ -973,12 +977,14 @@ async def upsert_style_pattern(
|
||||
pattern_text: str,
|
||||
context: str = "",
|
||||
examples: list[str] | None = None,
|
||||
appeal_subtype: str = "",
|
||||
) -> None:
|
||||
pool = await get_pool()
|
||||
async with pool.acquire() as conn:
|
||||
existing = await conn.fetchrow(
|
||||
"SELECT id, frequency FROM style_patterns WHERE pattern_type = $1 AND pattern_text = $2",
|
||||
pattern_type, pattern_text,
|
||||
"SELECT id, frequency FROM style_patterns "
|
||||
"WHERE pattern_type = $1 AND pattern_text = $2 AND appeal_subtype = $3",
|
||||
pattern_type, pattern_text, appeal_subtype,
|
||||
)
|
||||
if existing:
|
||||
await conn.execute(
|
||||
@@ -987,18 +993,27 @@ async def upsert_style_pattern(
|
||||
)
|
||||
else:
|
||||
await conn.execute(
|
||||
"""INSERT INTO style_patterns (pattern_type, pattern_text, context, examples)
|
||||
VALUES ($1, $2, $3, $4)""",
|
||||
"""INSERT INTO style_patterns (pattern_type, pattern_text, context, examples, appeal_subtype)
|
||||
VALUES ($1, $2, $3, $4, $5)""",
|
||||
pattern_type, pattern_text, context,
|
||||
json.dumps(examples or []),
|
||||
appeal_subtype,
|
||||
)
|
||||
|
||||
|
||||
async def clear_style_patterns() -> None:
|
||||
"""Delete all existing style patterns (used before re-analysis)."""
|
||||
async def clear_style_patterns(appeal_subtype: str = "") -> None:
|
||||
"""Delete style patterns, optionally filtered by appeal_subtype.
|
||||
|
||||
Empty appeal_subtype = delete ALL patterns.
|
||||
"""
|
||||
pool = await get_pool()
|
||||
async with pool.acquire() as conn:
|
||||
await conn.execute("DELETE FROM style_patterns")
|
||||
if appeal_subtype:
|
||||
await conn.execute(
|
||||
"DELETE FROM style_patterns WHERE appeal_subtype = $1", appeal_subtype
|
||||
)
|
||||
else:
|
||||
await conn.execute("DELETE FROM style_patterns")
|
||||
|
||||
|
||||
# ── Semantic Search (V2 — decision blocks & case law) ─────────────
|
||||
|
||||
Reference in New Issue
Block a user